@actuarial-ts/data 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.
- package/README.md +45 -127
- package/dist/casualtyDiagnosticReview.d.ts +46 -0
- package/dist/casualtyDiagnosticReview.d.ts.map +1 -0
- package/dist/casualtyDiagnosticReview.js +23 -0
- package/dist/casualtyDiagnosticReview.js.map +1 -0
- package/dist/diagnosticDefinition.d.ts +4 -0
- package/dist/diagnosticDefinition.d.ts.map +1 -0
- package/dist/diagnosticDefinition.js +6 -0
- package/dist/diagnosticDefinition.js.map +1 -0
- package/dist/diagnosticInput.d.ts +97 -13
- package/dist/diagnosticInput.d.ts.map +1 -1
- package/dist/diagnosticInput.js +58 -46
- package/dist/diagnosticInput.js.map +1 -1
- package/dist/diagnosticPreparedReview.d.ts +43 -0
- package/dist/diagnosticPreparedReview.d.ts.map +1 -0
- package/dist/diagnosticPreparedReview.js +58 -0
- package/dist/diagnosticPreparedReview.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/review.d.ts +15 -1
- package/dist/review.d.ts.map +1 -1
- package/dist/review.js +3 -2
- package/dist/review.js.map +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +3 -3
- package/src/casualtyDiagnosticReview.ts +17 -0
- package/src/diagnosticDefinition.ts +6 -0
- package/src/diagnosticInput.ts +61 -66
- package/src/diagnosticPreparedReview.ts +39 -0
- package/src/index.ts +4 -1
- package/src/review.ts +18 -3
- package/src/version.ts +1 -0
- package/dist/diagnosticReview.d.ts +0 -68
- package/dist/diagnosticReview.d.ts.map +0 -1
- package/dist/diagnosticReview.js +0 -370
- package/dist/diagnosticReview.js.map +0 -1
- package/src/diagnosticReview.ts +0 -547
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type DiagnosticDeepReadonly, type DiagnosticReviewRuleEvaluation, type PreparedDiagnosticData } from "@actuarial-ts/core";
|
|
2
|
+
import { type DataCheck, type DataFinding, type DataReviewReport } from "./review.js";
|
|
3
|
+
export interface DiagnosticGroupingAssignment {
|
|
4
|
+
readonly key: string;
|
|
5
|
+
readonly group: string;
|
|
6
|
+
readonly source?: import("@actuarial-ts/core").DiagnosticSourceLocation;
|
|
7
|
+
}
|
|
8
|
+
export interface DiagnosticCachedFormulaEvidence {
|
|
9
|
+
readonly id: string;
|
|
10
|
+
readonly source?: import("@actuarial-ts/core").DiagnosticSourceLocation;
|
|
11
|
+
readonly formula?: string;
|
|
12
|
+
readonly cachedValue?: number | null;
|
|
13
|
+
readonly declaredFormulaSource: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface DiagnosticReviewEvidence {
|
|
16
|
+
readonly groupingAssignments: readonly DiagnosticGroupingAssignment[];
|
|
17
|
+
readonly cachedFormulas: readonly DiagnosticCachedFormulaEvidence[];
|
|
18
|
+
}
|
|
19
|
+
export interface DiagnosticReviewIdentityBody {
|
|
20
|
+
readonly definitionIntegrity: string;
|
|
21
|
+
readonly preparationFingerprint: string;
|
|
22
|
+
readonly evidence: DiagnosticDeepReadonly<DiagnosticReviewEvidence> | null;
|
|
23
|
+
readonly checks: readonly {
|
|
24
|
+
readonly id: string;
|
|
25
|
+
readonly status: DataCheck["status"];
|
|
26
|
+
readonly findings: readonly DataFinding[];
|
|
27
|
+
}[];
|
|
28
|
+
readonly summary: DataReviewReport["summary"];
|
|
29
|
+
readonly evaluations: readonly DiagnosticReviewRuleEvaluation[];
|
|
30
|
+
}
|
|
31
|
+
export interface DiagnosticReviewReceipt {
|
|
32
|
+
readonly report: DiagnosticDeepReadonly<DataReviewReport>;
|
|
33
|
+
readonly evaluations: readonly DiagnosticReviewRuleEvaluation[];
|
|
34
|
+
readonly evidence: DiagnosticDeepReadonly<DiagnosticReviewEvidence> | null;
|
|
35
|
+
readonly identityBody: DiagnosticDeepReadonly<DiagnosticReviewIdentityBody>;
|
|
36
|
+
readonly reportFingerprint: string;
|
|
37
|
+
}
|
|
38
|
+
export interface ReviewPreparedDiagnosticDataInput {
|
|
39
|
+
readonly prepared: PreparedDiagnosticData;
|
|
40
|
+
readonly evidence: DiagnosticReviewEvidence | null;
|
|
41
|
+
}
|
|
42
|
+
export declare function reviewPreparedDiagnosticData(input: ReviewPreparedDiagnosticDataInput): DiagnosticReviewReceipt;
|
|
43
|
+
//# sourceMappingURL=diagnosticPreparedReview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnosticPreparedReview.d.ts","sourceRoot":"","sources":["../src/diagnosticPreparedReview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyD,KAAK,sBAAsB,EAAE,KAAK,8BAA8B,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC1L,OAAO,EAA+E,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEnK,MAAM,WAAW,4BAA4B;IAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,oBAAoB,EAAE,wBAAwB,CAAA;CAAE;AACvK,MAAM,WAAW,+BAA+B;IAAG,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,oBAAoB,EAAE,wBAAwB,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAC,IAAI,CAAC;IAAC,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAA;CAAE;AACzP,MAAM,WAAW,wBAAwB;IAAG,QAAQ,CAAC,mBAAmB,EAAE,SAAS,4BAA4B,EAAE,CAAC;IAAC,QAAQ,CAAC,cAAc,EAAE,SAAS,+BAA+B,EAAE,CAAA;CAAE;AACxL,MAAM,WAAW,4BAA4B;IAAG,QAAQ,CAAC,mBAAmB,EAAC,MAAM,CAAC;IAAC,QAAQ,CAAC,sBAAsB,EAAC,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAC,sBAAsB,CAAC,wBAAwB,CAAC,GAAC,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAC,SAAS;QAAC,QAAQ,CAAC,EAAE,EAAC,MAAM,CAAC;QAAA,QAAQ,CAAC,MAAM,EAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAAA,QAAQ,CAAC,QAAQ,EAAC,SAAS,WAAW,EAAE,CAAA;KAAC,EAAE,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAC,SAAS,8BAA8B,EAAE,CAAA;CAAE;AAClb,MAAM,WAAW,uBAAuB;IAAG,QAAQ,CAAC,MAAM,EAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAC,SAAS,8BAA8B,EAAE,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAC,sBAAsB,CAAC,wBAAwB,CAAC,GAAC,IAAI,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAC,sBAAsB,CAAC,4BAA4B,CAAC,CAAC;IAAC,QAAQ,CAAC,iBAAiB,EAAC,MAAM,CAAA;CAAE;AAC7V,MAAM,WAAW,iCAAiC;IAAG,QAAQ,CAAC,QAAQ,EAAC,sBAAsB,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAC,wBAAwB,GAAC,IAAI,CAAA;CAAE;AAkBhJ,wBAAgB,4BAA4B,CAAC,KAAK,EAAC,iCAAiC,GAAE,uBAAuB,CAY5G"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { canonicalJson, evaluateDiagnosticReviewRules, fnv1a64 } from "@actuarial-ts/core";
|
|
2
|
+
import { createNotEvaluatedDataCheck, createStructuredDataCheck, summarizeDataChecks } from "./review.js";
|
|
3
|
+
const fixed = [
|
|
4
|
+
["diagnostic/structural/loss-identity", "Loss identities are unique", "fail"],
|
|
5
|
+
["diagnostic/structural/exposure-identity", "Exposure identities are coherent", "fail"],
|
|
6
|
+
["diagnostic/structural/period-validity", "Periods are valid", "fail"],
|
|
7
|
+
["diagnostic/structural/measure-contract", "Measure keys match their declared sources", "fail"],
|
|
8
|
+
["diagnostic/structural/loss-completeness", "Loss records are complete", "fail"],
|
|
9
|
+
["diagnostic/structural/exposure-completeness", "Exposure records are complete and finite", "fail"],
|
|
10
|
+
["diagnostic/structural/loss-without-exposure", "Loss cells have required exposure", "warning"],
|
|
11
|
+
["diagnostic/structural/exposure-without-loss", "Exposures attach to retained loss cells", "warning"],
|
|
12
|
+
["diagnostic/structural/expected-cell-coverage", "Expected cells are present", "fail"],
|
|
13
|
+
["diagnostic/structural/grouping-consistency", "Grouping assignments are consistent", "fail"],
|
|
14
|
+
["diagnostic/structural/cached-formula-provenance", "Cached formulas retain provenance", "warning"],
|
|
15
|
+
];
|
|
16
|
+
const codeToCheck = { "duplicate-loss-record-id": fixed[0][0], "duplicate-claim-snapshot": fixed[0][0], "claim-identity-conflict": fixed[0][0], "duplicate-aggregate-snapshot": fixed[0][0], "duplicate-exposure-identity": fixed[1][0], "conflicting-exposure-identity": fixed[1][0], "unknown-origin-period": fixed[2][0], "unknown-valuation-period": fixed[2][0], "valuation-before-origin": fixed[2][0], "unsafe-development-age": fixed[2][0], "undeclared-loss-measure": fixed[3][0], "wrong-source-loss-measure": fixed[3][0], "undeclared-exposure-measure": fixed[3][0], "wrong-source-exposure-measure": fixed[3][0], "incomplete-loss-record": fixed[4][0], "missing-exposure-value": fixed[5][0], "incomplete-exposure": fixed[5][0], "non-finite-exposure": fixed[5][0], "loss-without-exposure": fixed[6][0], "exposure-without-loss": fixed[7][0], "missing-expected-cell": fixed[8][0] };
|
|
17
|
+
function freeze(value) { if (value && typeof value === "object") {
|
|
18
|
+
for (const child of Object.values(value))
|
|
19
|
+
freeze(child);
|
|
20
|
+
Object.freeze(value);
|
|
21
|
+
} return value; }
|
|
22
|
+
export function reviewPreparedDiagnosticData(input) {
|
|
23
|
+
// Authenticity is enforced by the core evaluator before evidence can affect a receipt.
|
|
24
|
+
const evaluations = evaluateDiagnosticReviewRules(input.prepared);
|
|
25
|
+
const evidence = input.evidence === null ? null : freeze(structuredClone(input.evidence));
|
|
26
|
+
const findingsByCheck = new Map(fixed.map(([id]) => [id, []]));
|
|
27
|
+
for (const finding of input.prepared.findings) {
|
|
28
|
+
const id = codeToCheck[finding.code];
|
|
29
|
+
if (id)
|
|
30
|
+
findingsByCheck.get(id).push({ code: finding.code, message: finding.message, context: { measureId: finding.measureId, sourceGroup: finding.sourceGroup, origin: finding.origin, valuation: finding.valuation, developmentAge: finding.developmentAge, ageUnit: finding.ageUnit, sources: finding.sources } });
|
|
31
|
+
}
|
|
32
|
+
if (evidence) {
|
|
33
|
+
const assignments = new Map();
|
|
34
|
+
for (const item of evidence.groupingAssignments) {
|
|
35
|
+
const values = assignments.get(item.key) ?? new Set();
|
|
36
|
+
values.add(item.group);
|
|
37
|
+
assignments.set(item.key, values);
|
|
38
|
+
}
|
|
39
|
+
for (const [key, groups] of assignments)
|
|
40
|
+
if (groups.size > 1)
|
|
41
|
+
findingsByCheck.get(fixed[9][0]).push({ code: "inconsistent-group-mapping", message: "Grouping evidence assigns one key to multiple groups", context: { groupingKey: key, sources: [] } });
|
|
42
|
+
for (const item of evidence.cachedFormulas)
|
|
43
|
+
if (item.declaredFormulaSource && (item.formula === undefined || item.formula.length === 0 || item.cachedValue === undefined || item.source === undefined))
|
|
44
|
+
findingsByCheck.get(fixed[10][0]).push({ code: "cached-formula-provenance", message: "Declared formula-derived value lacks complete formula provenance", context: { cachedEvidenceId: item.id, sources: item.source ? [item.source] : [] } });
|
|
45
|
+
}
|
|
46
|
+
const checks = fixed.map(([id, description, severity], index) => { if ((index === 9 || index === 10) && evidence === null)
|
|
47
|
+
return createNotEvaluatedDataCheck(id, description, "review evidence was omitted"); return createStructuredDataCheck(id, description, severity, findingsByCheck.get(id)); });
|
|
48
|
+
for (const rule of input.prepared.definition.definition.reviewRules) {
|
|
49
|
+
const matching = evaluations.filter((item) => item.ruleId === rule.id);
|
|
50
|
+
const status = matching.some((item) => item.status === "triggered" && item.severity === "fail") ? "fail" : matching.some((item) => item.status === "triggered") ? "warning" : matching.some((item) => item.status === "not-evaluated") ? "not-evaluated" : "pass";
|
|
51
|
+
const findings = matching.filter((item) => item.status === "triggered").map((item) => ({ code: rule.code, message: rule.description, context: { ruleId: rule.id, reviewScope: item.reviewScope, sources: item.reviewScope.sources } }));
|
|
52
|
+
checks.push({ id: rule.id, description: rule.description, status, details: findings.slice(0, 20).map((item) => item.message), findings });
|
|
53
|
+
}
|
|
54
|
+
const report = freeze(summarizeDataChecks(checks));
|
|
55
|
+
const identityBody = freeze({ definitionIntegrity: input.prepared.definition.definitionIntegrity, preparationFingerprint: input.prepared.preparationFingerprint, evidence, checks: report.checks.map((check) => ({ id: check.id, status: check.status, findings: check.findings })), summary: report.summary, evaluations });
|
|
56
|
+
return freeze({ report, evaluations, evidence, identityBody, reportFingerprint: `fnv1a64-jcs-v1:${fnv1a64(canonicalJson({ identityVersion: 1, kind: "diagnostic-review", review: identityBody }))}` });
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=diagnosticPreparedReview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnosticPreparedReview.js","sourceRoot":"","sources":["../src/diagnosticPreparedReview.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,10 @@ export * from "./csv.js";
|
|
|
2
2
|
export * from "./annualDevelopment.js";
|
|
3
3
|
export * from "./exposure.js";
|
|
4
4
|
export * from "./diagnosticInput.js";
|
|
5
|
-
export * from "./
|
|
5
|
+
export * from "./diagnosticDefinition.js";
|
|
6
|
+
export * from "./version.js";
|
|
7
|
+
export * from "./diagnosticPreparedReview.js";
|
|
8
|
+
export * from "./casualtyDiagnosticReview.js";
|
|
6
9
|
export * from "./lossRun.js";
|
|
7
10
|
export * from "./longFormat.js";
|
|
8
11
|
export * from "./review.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,cAAc,CAAC;AAC7B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,10 @@ export * from "./csv.js";
|
|
|
2
2
|
export * from "./annualDevelopment.js";
|
|
3
3
|
export * from "./exposure.js";
|
|
4
4
|
export * from "./diagnosticInput.js";
|
|
5
|
-
export * from "./
|
|
5
|
+
export * from "./diagnosticDefinition.js";
|
|
6
|
+
export * from "./version.js";
|
|
7
|
+
export * from "./diagnosticPreparedReview.js";
|
|
8
|
+
export * from "./casualtyDiagnosticReview.js";
|
|
6
9
|
export * from "./lossRun.js";
|
|
7
10
|
export * from "./longFormat.js";
|
|
8
11
|
export * from "./review.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,cAAc,CAAC;AAC7B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC"}
|
package/dist/review.d.ts
CHANGED
|
@@ -22,12 +22,26 @@ import type { ClaimSnapshot, Triangle } from "@actuarial-ts/core";
|
|
|
22
22
|
*/
|
|
23
23
|
export type DataCheckStatus = "pass" | "warning" | "fail" | "not-evaluated";
|
|
24
24
|
export interface DataFindingContext {
|
|
25
|
+
ruleId?: string;
|
|
26
|
+
measureId?: string;
|
|
27
|
+
expressionPath?: string;
|
|
28
|
+
offendingKey?: string;
|
|
29
|
+
groupingKey?: string;
|
|
30
|
+
cachedEvidenceId?: string;
|
|
31
|
+
sourceGroup?: string;
|
|
25
32
|
origin?: string;
|
|
26
33
|
valuation?: string;
|
|
34
|
+
developmentAge?: number;
|
|
35
|
+
ageUnit?: string;
|
|
36
|
+
recordId?: string;
|
|
37
|
+
claimId?: string;
|
|
38
|
+
exposureKey?: string;
|
|
27
39
|
ageMonths?: number;
|
|
28
40
|
group?: string;
|
|
29
41
|
sourceFile?: string;
|
|
30
42
|
sourceRow?: number;
|
|
43
|
+
sources?: readonly import("@actuarial-ts/core").DiagnosticSourceLocation[];
|
|
44
|
+
reviewScope?: import("@actuarial-ts/core").DiagnosticReviewEvaluationScope;
|
|
31
45
|
}
|
|
32
46
|
export interface DataFinding {
|
|
33
47
|
/** Stable machine-readable finding code, usually the containing check id. */
|
|
@@ -41,7 +55,7 @@ export interface DataCheck {
|
|
|
41
55
|
status: DataCheckStatus;
|
|
42
56
|
details: string[];
|
|
43
57
|
/** Additive structured detail for consumers that should not parse prose. */
|
|
44
|
-
findings
|
|
58
|
+
findings: DataFinding[];
|
|
45
59
|
}
|
|
46
60
|
export interface DataReviewReport {
|
|
47
61
|
checks: DataCheck[];
|
package/dist/review.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../src/review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAElE;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,eAAe,CAAC;AAE5E,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../src/review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAElE;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,eAAe,CAAC;AAE5E,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,OAAO,oBAAoB,EAAE,wBAAwB,EAAE,CAAC;IAC3E,WAAW,CAAC,EAAE,OAAO,oBAAoB,EAAE,+BAA+B,CAAC;CAC5E;AAED,MAAM,WAAW,WAAW;IAC1B,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,4EAA4E;IAC5E,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CAChF;AAED,MAAM,WAAW,sBAAsB;IACrC,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAwCD,yFAAyF;AACzF,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,SAAS,GAAG,MAAM,EACnC,QAAQ,EAAE,SAAS,WAAW,EAAE,GAC/B,SAAS,CAWX;AAED,2DAA2D;AAC3D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAEzE;AAED,qFAAqF;AACrF,wBAAgB,2BAA2B,CACzC,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,SAAS,CAEX;AAcD,8EAA8E;AAC9E,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,EAAE,EACvB,IAAI,GAAE,sBAA2B,GAChC,gBAAgB,CAsGlB;AA+ED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAG,gBAAgB,CA+FpF"}
|
package/dist/review.js
CHANGED
|
@@ -11,12 +11,13 @@ function makeCheck(id, description, statusWhenFound, findings) {
|
|
|
11
11
|
description,
|
|
12
12
|
status: findings.length > 0 ? statusWhenFound : "pass",
|
|
13
13
|
details: capDetails(findings),
|
|
14
|
+
findings: [],
|
|
14
15
|
};
|
|
15
16
|
}
|
|
16
17
|
function notEvaluated(id, description, reason) {
|
|
17
18
|
// A check that could not run is REPORTED as such - counting it as "pass"
|
|
18
19
|
// would overstate the review in the very disclosure this feeds.
|
|
19
|
-
return { id, description, status: "not-evaluated", details: [`not evaluated: ${reason}`] };
|
|
20
|
+
return { id, description, status: "not-evaluated", details: [`not evaluated: ${reason}`], findings: [] };
|
|
20
21
|
}
|
|
21
22
|
function summarize(checks) {
|
|
22
23
|
const summary = { pass: 0, warning: 0, fail: 0, notEvaluated: 0 };
|
|
@@ -39,7 +40,7 @@ export function createStructuredDataCheck(id, description, statusWhenFound, find
|
|
|
39
40
|
description,
|
|
40
41
|
status: findings.length > 0 ? statusWhenFound : "pass",
|
|
41
42
|
details,
|
|
42
|
-
findings:
|
|
43
|
+
findings: [...findings],
|
|
43
44
|
};
|
|
44
45
|
}
|
|
45
46
|
/** Public report summarizer for additive review suites. */
|
package/dist/review.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.js","sourceRoot":"","sources":["../src/review.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../src/review.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,UAAU,CAAC"}
|
package/dist/version.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@actuarial-ts/data",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Data ingestion and ASOP No. 23
|
|
3
|
+
"version": "0.6.0",
|
|
4
|
+
"description": "Data ingestion and ASOP No. 23 support for actuarial-ts: loss/exposure preparation, atomic generalized diagnostic validation, declarative review, and triangle assembly.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/index.js",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"prepack": "tsc -p tsconfig.build.json"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@actuarial-ts/core": "^0.
|
|
51
|
+
"@actuarial-ts/core": "^0.6.0",
|
|
52
52
|
"zod": "^3.25.76"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CasualtyCountBindings, DiagnosticControlTotalProjection, DiagnosticMeasureExpression, DiagnosticReviewFilter, DiagnosticReviewRule } from "@actuarial-ts/core";
|
|
2
|
+
|
|
3
|
+
export interface CasualtyMonotonicReviewBinding { readonly id:string;readonly expression:DiagnosticMeasureExpression;readonly direction:"nondecreasing"|"nonincreasing";readonly tolerance?:{readonly absolute?:number;readonly relative?:number} }
|
|
4
|
+
export interface CasualtyLayerOrderReviewBinding { readonly id:string;readonly narrower:DiagnosticMeasureExpression;readonly broader:DiagnosticMeasureExpression;readonly comparability:{readonly kind:"compiler-proven"}|{readonly kind:"caller-asserted";readonly rationaleArtifactId:string};readonly tolerance?:{readonly absolute?:number;readonly relative?:number} }
|
|
5
|
+
export interface CasualtyControlTotalReviewBinding { readonly id:string;readonly expression:DiagnosticMeasureExpression;readonly expected:number;readonly filter?:DiagnosticReviewFilter;readonly projection:DiagnosticControlTotalProjection;readonly tolerance?:{readonly absolute?:number;readonly relative?:number} }
|
|
6
|
+
export interface CreateCasualtyDiagnosticReviewRulesInput { readonly counts:CasualtyCountBindings;readonly exposure:string;readonly monotonicMeasures:readonly CasualtyMonotonicReviewBinding[];readonly layerOrders:readonly CasualtyLayerOrderReviewBinding[];readonly controlTotals:readonly CasualtyControlTotalReviewBinding[];readonly severityOverrides?:Readonly<Record<string,"warning"|"fail">> }
|
|
7
|
+
const m=(measureId:string)=>({op:"measure" as const,measureId});const tolerance=(value:{absolute?:number;relative?:number}|undefined)=>({absolute:value?.absolute??0,relative:value?.relative??0});
|
|
8
|
+
export function createCasualtyDiagnosticReviewRules(input:CreateCasualtyDiagnosticReviewRulesInput):readonly DiagnosticReviewRule[]{
|
|
9
|
+
const fixed:DiagnosticReviewRule[]=[
|
|
10
|
+
{kind:"reconcile",id:"casualty/review/count-reconciliation",code:"count-reconciliation",description:"Reported count must equal open plus closed-no-pay plus closed-with-pay count",severity:"fail",missingInput:"not-evaluated",tolerance:{absolute:0,relative:0},actual:m(input.counts.reported),expected:{op:"add",terms:[m(input.counts.open),m(input.counts.closedNoPay),m(input.counts.closedWithPay)]}},
|
|
11
|
+
{kind:"compare",id:"casualty/review/closed-no-pay-bound",code:"closed-no-pay-bound",description:"Closed-no-pay count must not exceed reported count",severity:"fail",missingInput:"not-evaluated",tolerance:{absolute:0,relative:0},when:{left:m(input.counts.closedNoPay),operator:"gt",right:m(input.counts.reported)}},
|
|
12
|
+
{kind:"compare",id:"casualty/review/positive-exposure",code:"positive-exposure",description:"Exposure must be strictly positive",severity:"fail",missingInput:"not-evaluated",tolerance:{absolute:0,relative:0},when:{left:m(input.exposure),operator:"lte",right:{op:"constant",value:0}}},
|
|
13
|
+
{kind:"monotonic",id:"casualty/review/closed-reopen-signal",code:"closed-reopen-signal",description:"Closed count must be nondecreasing across valuations",severity:"warning",missingInput:"not-evaluated",tolerance:{absolute:0,relative:0},expression:{op:"add",terms:[m(input.counts.closedNoPay),m(input.counts.closedWithPay)]},direction:"nondecreasing"},
|
|
14
|
+
];
|
|
15
|
+
const dynamic:DiagnosticReviewRule[]=[...input.monotonicMeasures.map((item):DiagnosticReviewRule=>({kind:"monotonic",id:item.id,code:item.id,description:`Expression must be ${item.direction} across valuations`,severity:"warning",missingInput:"not-evaluated",tolerance:tolerance(item.tolerance),expression:item.expression,direction:item.direction})),...input.layerOrders.map((item):DiagnosticReviewRule=>({kind:"layer-order",id:item.id,code:item.id,description:"Narrower amount expression must not exceed broader amount expression",severity:"fail",missingInput:"not-evaluated",tolerance:tolerance(item.tolerance),narrower:item.narrower,broader:item.broader,comparability:item.comparability})),...input.controlTotals.map((item):DiagnosticReviewRule=>({kind:"control-total",id:item.id,code:item.id,description:"Expression must reconcile to the declared control total",severity:"fail",missingInput:"not-evaluated",tolerance:tolerance(item.tolerance),expression:item.expression,expected:item.expected,...(item.filter?{filter:item.filter}:{}),projection:item.projection}))];
|
|
16
|
+
const all=[...fixed,...dynamic];const ids=new Set<string>();for(const rule of all){if(ids.has(rule.id))throw new Error(`Duplicate review rule ID ${rule.id}`);ids.add(rule.id)}for(const key of Object.keys(input.severityOverrides??{}))if(!ids.has(key))throw new Error(`Unknown severity override ${key}`);return Object.freeze(all.map((rule)=>Object.freeze({...rule,severity:input.severityOverrides?.[rule.id]??rule.severity}) as DiagnosticReviewRule));
|
|
17
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { compileDiagnosticDefinition, type CompiledDiagnosticDefinition, type DiagnosticDefinition } from "@actuarial-ts/core";
|
|
2
|
+
|
|
3
|
+
/** Validates unknown authored definition data through core's single semantic compiler. */
|
|
4
|
+
export function validateDiagnosticDefinition(value: unknown): CompiledDiagnosticDefinition {
|
|
5
|
+
return compileDiagnosticDefinition(value as DiagnosticDefinition);
|
|
6
|
+
}
|
package/src/diagnosticInput.ts
CHANGED
|
@@ -1,79 +1,74 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
DiagnosticValidationError,
|
|
3
|
+
compileDiagnosticDefinition,
|
|
4
|
+
prepareDiagnosticData,
|
|
4
5
|
runMetricDiagnostics,
|
|
5
|
-
type
|
|
6
|
-
type
|
|
6
|
+
type CompiledDiagnosticDefinition,
|
|
7
|
+
type DiagnosticCompletePeriodCutoff,
|
|
8
|
+
type DiagnosticDeepReadonly,
|
|
9
|
+
type DiagnosticDefinition,
|
|
10
|
+
type DiagnosticExpectedCell,
|
|
11
|
+
type DiagnosticExposureObservation,
|
|
12
|
+
type DiagnosticLossInput,
|
|
13
|
+
type DiagnosticsFilter,
|
|
14
|
+
type JsonValue,
|
|
7
15
|
type MetricDiagnosticsResult,
|
|
8
|
-
type
|
|
9
|
-
type RunMetricDiagnosticsInput,
|
|
16
|
+
type DiagnosticValidationIssue,
|
|
10
17
|
} from "@actuarial-ts/core";
|
|
11
18
|
import { z } from "zod";
|
|
19
|
+
import { reviewPreparedDiagnosticData, type DiagnosticReviewReceipt } from "./diagnosticPreparedReview.js";
|
|
12
20
|
|
|
13
|
-
const
|
|
21
|
+
const sourceSchema = z.object({ artifactId: z.string().min(1), sourceFile: z.string().min(1).optional(), sourceSheet: z.string().min(1).optional(), sourceRow: z.number().int().nonnegative().optional(), sourceCell: z.string().min(1).optional() }).strict();
|
|
22
|
+
const measuresSchema = z.record(z.union([z.number(), z.null()]));
|
|
23
|
+
const lossBase = { recordId: z.string().min(1), sourceGroup: z.string().min(1), origin: z.string().min(1), valuation: z.string().min(1), complete: z.boolean(), source: sourceSchema.optional(), measures: measuresSchema };
|
|
24
|
+
const lossSchema = z.discriminatedUnion("rowType", [z.object({ ...lossBase, rowType: z.literal("claim"), claimId: z.string().min(1) }).strict(), z.object({ ...lossBase, rowType: z.literal("aggregate") }).strict()]);
|
|
25
|
+
const exposureSchema = z.object({ key: z.string().min(1), sourceGroup: z.string().min(1), origin: z.string().min(1), valuation: z.string().min(1).optional(), measureId: z.string().min(1), value: z.union([z.number(), z.null()]), complete: z.boolean(), source: sourceSchema.optional() }).strict();
|
|
26
|
+
const filterSchema = z.object({ sourceGroups: z.array(z.string().min(1)).optional(), outputGroups: z.array(z.string().min(1)).optional(), origins: z.array(z.string().min(1)).optional(), originFrom: z.string().min(1).optional(), originThrough: z.string().min(1).optional(), valuations: z.array(z.string().min(1)).optional(), valuationFrom: z.string().min(1).optional(), valuationThrough: z.string().min(1).optional(), minDevelopmentAge: z.number().int().nonnegative().optional(), maxDevelopmentAge: z.number().int().nonnegative().optional(), instanceIds: z.array(z.string().min(1)).optional() }).strict();
|
|
27
|
+
const cutoffSchema = z.object({ sourceGroup: z.string().min(1), originThrough: z.string().min(1).nullable(), valuationThrough: z.string().min(1).nullable() }).strict();
|
|
28
|
+
const expectedSchema = z.object({ sourceGroup: z.string().min(1), origin: z.string().min(1), valuation: z.string().min(1), source: sourceSchema.optional() }).strict();
|
|
29
|
+
const jsonSchema: z.ZodType<JsonValue> = z.lazy(() => z.union([z.null(), z.boolean(), z.number().finite(), z.string(), z.array(jsonSchema), z.record(jsonSchema)]));
|
|
30
|
+
const policySchema = z.object({ allowedReviewStatuses: z.array(z.enum(["pass", "warning", "not-evaluated", "fail"])).optional(), allowedMetricFindingSeverities: z.array(z.enum(["info", "warning", "fail"])).optional(), rationaleRef: z.string().min(1).optional() }).strict();
|
|
31
|
+
const runSchema = z.object({ definition: z.unknown(), losses: z.array(lossSchema), exposures: z.array(exposureSchema).optional(), filter: filterSchema.optional(), completePeriodCutoffs: z.array(cutoffSchema).optional(), expectedCells: z.array(expectedSchema).optional(), reviewEvidence: jsonSchema.nullable().optional(), runPresetId: z.string().min(1).optional(), datasetArtifactId: z.string().min(1).optional(), groupMap: z.record(z.string().min(1)).optional(), groupDimensions: z.record(jsonSchema).optional(), policy: policySchema.optional() }).strict();
|
|
14
32
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
measures: measuresSchema,
|
|
24
|
-
}).strict();
|
|
33
|
+
export type DiagnosticAllowedReviewStatus = "pass" | "warning" | "not-evaluated" | "fail";
|
|
34
|
+
export interface DiagnosticExecutionPolicyInput { readonly allowedReviewStatuses?: readonly DiagnosticAllowedReviewStatus[]; readonly allowedMetricFindingSeverities?: readonly ("info" | "warning" | "fail")[]; readonly rationaleRef?: string }
|
|
35
|
+
export interface DiagnosticRunInput { readonly definition: DiagnosticDefinition; readonly losses: readonly DiagnosticLossInput[]; readonly exposures?: readonly DiagnosticExposureObservation[]; readonly filter?: DiagnosticsFilter; readonly completePeriodCutoffs?: readonly DiagnosticCompletePeriodCutoff[]; readonly expectedCells?: readonly DiagnosticExpectedCell[]; readonly reviewEvidence?: JsonValue | null; readonly runPresetId?: string; readonly datasetArtifactId?: string; readonly groupMap?: Readonly<Record<string,string>>; readonly groupDimensions?: Readonly<Record<string,JsonValue>>; readonly policy?: DiagnosticExecutionPolicyInput }
|
|
36
|
+
declare const validatedDiagnosticRunInputBrand: unique symbol;
|
|
37
|
+
export interface ValidatedDiagnosticRunInput { readonly [validatedDiagnosticRunInputBrand]: true; readonly definition: CompiledDiagnosticDefinition; readonly losses: readonly DiagnosticDeepReadonly<DiagnosticLossInput>[]; readonly exposures: readonly DiagnosticDeepReadonly<DiagnosticExposureObservation>[]; readonly filter: DiagnosticDeepReadonly<DiagnosticsFilter>|null; readonly completePeriodCutoffs: readonly DiagnosticCompletePeriodCutoff[]; readonly expectedCells: readonly DiagnosticExpectedCell[]|null; readonly reviewEvidence: JsonValue|null; readonly runPresetId: string|null; readonly datasetArtifactId: string|null; readonly groupMap: Readonly<Record<string,string>>; readonly groupDimensions: Readonly<Record<string,JsonValue>>; readonly policy: { readonly allowedReviewStatuses: readonly DiagnosticAllowedReviewStatus[]; readonly allowedMetricFindingSeverities: readonly ("info"|"warning"|"fail")[]; readonly rationaleRef: string|null } }
|
|
38
|
+
export interface DiagnosticExecutionGateReceipt { readonly allowedReviewStatuses:readonly DiagnosticAllowedReviewStatus[];readonly allowedMetricFindingSeverities:readonly ("info"|"warning"|"fail")[];readonly rationaleRef:string|null;readonly reviewGate:"passed"|"blocked";readonly metricGate:"not-run"|"passed"|"blocked" }
|
|
39
|
+
export interface CompletedValidatedMetricDiagnosticsRun { readonly status:"completed";readonly prepared:import("@actuarial-ts/core").PreparedDiagnosticData;readonly review:DiagnosticReviewReceipt;readonly result:DiagnosticDeepReadonly<MetricDiagnosticsResult>;readonly runPresetId:string|null;readonly datasetArtifactId:string|null;readonly groupMap:Readonly<Record<string,string>>;readonly groupDimensions:Readonly<Record<string,JsonValue>>;readonly gate:DiagnosticExecutionGateReceipt&{readonly reviewGate:"passed";readonly metricGate:"passed"} }
|
|
40
|
+
export type ValidatedMetricDiagnosticsOutcome=CompletedValidatedMetricDiagnosticsRun|{readonly status:"blocked";readonly stage:"review";readonly prepared:import("@actuarial-ts/core").PreparedDiagnosticData;readonly review:DiagnosticReviewReceipt;readonly result:null;readonly runPresetId:string|null;readonly datasetArtifactId:string|null;readonly groupMap:Readonly<Record<string,string>>;readonly groupDimensions:Readonly<Record<string,JsonValue>>;readonly gate:DiagnosticExecutionGateReceipt&{readonly reviewGate:"blocked";readonly metricGate:"not-run"}}|{readonly status:"blocked";readonly stage:"metric";readonly prepared:import("@actuarial-ts/core").PreparedDiagnosticData;readonly review:DiagnosticReviewReceipt;readonly result:DiagnosticDeepReadonly<MetricDiagnosticsResult>;readonly runPresetId:string|null;readonly datasetArtifactId:string|null;readonly groupMap:Readonly<Record<string,string>>;readonly groupDimensions:Readonly<Record<string,JsonValue>>;readonly gate:DiagnosticExecutionGateReceipt&{readonly reviewGate:"passed";readonly metricGate:"blocked"}};
|
|
25
41
|
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
origin: z.string().min(1),
|
|
30
|
-
valuation: z.string().min(1).optional(),
|
|
31
|
-
measures: measuresSchema,
|
|
32
|
-
complete: z.boolean().optional(),
|
|
33
|
-
dimensions: z.unknown().optional(),
|
|
34
|
-
}).strict();
|
|
42
|
+
const authentic = new WeakSet<object>();
|
|
43
|
+
function freeze<T>(value:T,seen=new WeakSet<object>()):DiagnosticDeepReadonly<T>{if(value===null||typeof value!=="object"||seen.has(value))return value as DiagnosticDeepReadonly<T>;seen.add(value);for(const child of Object.values(value as Record<string,unknown>))freeze(child,seen);return Object.freeze(value) as DiagnosticDeepReadonly<T>}
|
|
44
|
+
function issues(error:z.ZodError):DiagnosticValidationError{return new DiagnosticValidationError(error.issues.map((issue)=>({domain:(issue.path[0]==="definition"?"definition":issue.path[0]==="losses"||issue.path[0]==="exposures"||issue.path[0]==="reviewEvidence"?"input":"configuration") as "definition"|"input"|"configuration",code:issue.code==="unrecognized_keys"?"unknown-key":"invalid-type",path:`$${issue.path.map((part)=>typeof part==="number"?`[${part}]`:/^[A-Za-z_$][\w$]*$/.test(part)?`.${part}`:`[${JSON.stringify(part)}]`).join("")}`,message:issue.message})))}
|
|
35
45
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
export function validateDiagnosticDataset(value: unknown): ValidatedDiagnosticDataset {
|
|
49
|
-
const parsed = diagnosticDatasetSchema.safeParse(value);
|
|
50
|
-
if (!parsed.success) {
|
|
51
|
-
const details = parsed.error.issues
|
|
52
|
-
.map((issue) => `${issue.path.length > 0 ? issue.path.join(".") : "$"}: ${issue.message}`)
|
|
53
|
-
.join("; ");
|
|
54
|
-
throw new ReservingError("SHAPE", `Invalid diagnostic dataset: ${details}`);
|
|
55
|
-
}
|
|
56
|
-
return {
|
|
57
|
-
losses: parsed.data.losses,
|
|
58
|
-
...(parsed.data.exposures !== undefined ? { exposures: parsed.data.exposures } : {}),
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/** Validates unknown exposure rows, then applies core's stable-key reconciliation. */
|
|
63
|
-
export function validateAndReconcileDiagnosticExposures(
|
|
64
|
-
value: unknown,
|
|
65
|
-
): ReconciledDiagnosticExposures {
|
|
66
|
-
const validated = validateDiagnosticDataset({ losses: [], exposures: value });
|
|
67
|
-
return reconcileDiagnosticExposureKeys(validated.exposures ?? []);
|
|
46
|
+
export function validateDiagnosticRunInput(value:unknown):ValidatedDiagnosticRunInput{
|
|
47
|
+
const parsed=runSchema.safeParse(value);if(!parsed.success)throw issues(parsed.error);
|
|
48
|
+
const definition=compileDiagnosticDefinition(parsed.data.definition as DiagnosticDefinition);
|
|
49
|
+
const relationIssues:DiagnosticValidationIssue[]=parsed.data.losses.flatMap((row,index)=>row.rowType===definition.definition.lossRowGrain?[]:[{domain:"input" as const,code:"invalid-input-relationship" as const,path:`$.losses[${index}].rowType`,message:"Loss row type does not match definition grain"}]);
|
|
50
|
+
for(const [index,row] of (parsed.data.exposures??[]).entries()){const measure=definition.definition.measures.find((item)=>item.id===row.measureId);if(measure?.exposureTiming==="valuation-specific"&&row.valuation===undefined)relationIssues.push({domain:"input",code:"missing-required",path:`$.exposures[${index}].valuation`,message:"Valuation-specific exposure requires valuation"})}
|
|
51
|
+
if(relationIssues.length)throw new DiagnosticValidationError(relationIssues);
|
|
52
|
+
const review=parsed.data.policy?.allowedReviewStatuses??["pass","warning","not-evaluated"];
|
|
53
|
+
const metric=parsed.data.policy?.allowedMetricFindingSeverities??["info","warning"];
|
|
54
|
+
const rationale=parsed.data.policy?.rationaleRef??null;
|
|
55
|
+
if((review.includes("fail")||metric.includes("fail"))&&rationale===null)throw new DiagnosticValidationError([{domain:"configuration",code:"missing-required",path:"$.policy.rationaleRef",message:"A rationale is required when fail outcomes are allowed"}]);
|
|
56
|
+
const result=freeze({definition,losses:parsed.data.losses,exposures:parsed.data.exposures??[],filter:parsed.data.filter??null,completePeriodCutoffs:parsed.data.completePeriodCutoffs??[],expectedCells:parsed.data.expectedCells??null,reviewEvidence:parsed.data.reviewEvidence??null,runPresetId:parsed.data.runPresetId??null,datasetArtifactId:parsed.data.datasetArtifactId??null,groupMap:parsed.data.groupMap??Object.create(null),groupDimensions:parsed.data.groupDimensions??Object.create(null),policy:{allowedReviewStatuses:[...new Set(review)],allowedMetricFindingSeverities:[...new Set(metric)],rationaleRef:rationale}}) as unknown as ValidatedDiagnosticRunInput;
|
|
57
|
+
authentic.add(result);return result;
|
|
68
58
|
}
|
|
69
59
|
|
|
70
|
-
export
|
|
60
|
+
export function assertValidatedDiagnosticRunInput(value:unknown):asserts value is ValidatedDiagnosticRunInput{if(value===null||typeof value!=="object"||!authentic.has(value))throw new DiagnosticValidationError([{domain:"input",code:"invalid-input-relationship",path:"$",message:"Value is not an authentic validated diagnostic run input"}])}
|
|
71
61
|
|
|
72
|
-
|
|
73
|
-
export function runValidatedMetricDiagnostics(
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
)
|
|
77
|
-
const
|
|
78
|
-
return
|
|
62
|
+
const completed=new WeakSet<object>();
|
|
63
|
+
export function runValidatedMetricDiagnostics(input:ValidatedDiagnosticRunInput):ValidatedMetricDiagnosticsOutcome{
|
|
64
|
+
assertValidatedDiagnosticRunInput(input);const prepared=prepareDiagnosticData({definition:input.definition,losses:input.losses,exposures:input.exposures,filter:input.filter??undefined,completePeriodCutoffs:input.completePeriodCutoffs,expectedCells:input.expectedCells??undefined});
|
|
65
|
+
const review=reviewPreparedDiagnosticData({prepared,evidence:input.reviewEvidence as import("./diagnosticPreparedReview.js").DiagnosticReviewEvidence|null});
|
|
66
|
+
const disallowedReview=review.report.checks.some((check)=>!input.policy.allowedReviewStatuses.includes(check.status));
|
|
67
|
+
const base={prepared,review,runPresetId:input.runPresetId,datasetArtifactId:input.datasetArtifactId,groupMap:input.groupMap,groupDimensions:input.groupDimensions};
|
|
68
|
+
if(disallowedReview)return freeze({...base,status:"blocked" as const,stage:"review" as const,result:null,gate:{...input.policy,reviewGate:"blocked" as const,metricGate:"not-run" as const}}) as ValidatedMetricDiagnosticsOutcome;
|
|
69
|
+
const result=runMetricDiagnostics({prepared,groupMap:input.groupMap,groupDimensions:input.groupDimensions});
|
|
70
|
+
const disallowedMetric=result.findings.some((finding)=>finding.category!=="structural"&&!input.policy.allowedMetricFindingSeverities.includes(finding.severity));
|
|
71
|
+
if(disallowedMetric)return freeze({...base,status:"blocked" as const,stage:"metric" as const,result,gate:{...input.policy,reviewGate:"passed" as const,metricGate:"blocked" as const}}) as ValidatedMetricDiagnosticsOutcome;
|
|
72
|
+
const outcome=freeze({...base,status:"completed" as const,result,gate:{...input.policy,reviewGate:"passed" as const,metricGate:"passed" as const}}) as unknown as CompletedValidatedMetricDiagnosticsRun;completed.add(outcome);return outcome;
|
|
79
73
|
}
|
|
74
|
+
export function assertCompletedValidatedMetricDiagnosticsRun(value:unknown):asserts value is CompletedValidatedMetricDiagnosticsRun{if(value===null||typeof value!=="object"||!completed.has(value))throw new DiagnosticValidationError([{domain:"input",code:"invalid-input-relationship",path:"$",message:"Value is not an authentic completed diagnostic run"}])}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { canonicalJson, evaluateDiagnosticReviewRules, fnv1a64, type DiagnosticDeepReadonly, type DiagnosticReviewRuleEvaluation, type PreparedDiagnosticData } from "@actuarial-ts/core";
|
|
2
|
+
import { createNotEvaluatedDataCheck, createStructuredDataCheck, summarizeDataChecks, type DataCheck, type DataFinding, type DataReviewReport } from "./review.js";
|
|
3
|
+
|
|
4
|
+
export interface DiagnosticGroupingAssignment { readonly key: string; readonly group: string; readonly source?: import("@actuarial-ts/core").DiagnosticSourceLocation }
|
|
5
|
+
export interface DiagnosticCachedFormulaEvidence { readonly id: string; readonly source?: import("@actuarial-ts/core").DiagnosticSourceLocation; readonly formula?: string; readonly cachedValue?: number|null; readonly declaredFormulaSource: boolean }
|
|
6
|
+
export interface DiagnosticReviewEvidence { readonly groupingAssignments: readonly DiagnosticGroupingAssignment[]; readonly cachedFormulas: readonly DiagnosticCachedFormulaEvidence[] }
|
|
7
|
+
export interface DiagnosticReviewIdentityBody { readonly definitionIntegrity:string; readonly preparationFingerprint:string; readonly evidence:DiagnosticDeepReadonly<DiagnosticReviewEvidence>|null; readonly checks:readonly {readonly id:string;readonly status:DataCheck["status"];readonly findings:readonly DataFinding[]}[]; readonly summary:DataReviewReport["summary"]; readonly evaluations:readonly DiagnosticReviewRuleEvaluation[] }
|
|
8
|
+
export interface DiagnosticReviewReceipt { readonly report:DiagnosticDeepReadonly<DataReviewReport>; readonly evaluations:readonly DiagnosticReviewRuleEvaluation[]; readonly evidence:DiagnosticDeepReadonly<DiagnosticReviewEvidence>|null; readonly identityBody:DiagnosticDeepReadonly<DiagnosticReviewIdentityBody>; readonly reportFingerprint:string }
|
|
9
|
+
export interface ReviewPreparedDiagnosticDataInput { readonly prepared:PreparedDiagnosticData; readonly evidence:DiagnosticReviewEvidence|null }
|
|
10
|
+
|
|
11
|
+
const fixed=[
|
|
12
|
+
["diagnostic/structural/loss-identity","Loss identities are unique","fail"],
|
|
13
|
+
["diagnostic/structural/exposure-identity","Exposure identities are coherent","fail"],
|
|
14
|
+
["diagnostic/structural/period-validity","Periods are valid","fail"],
|
|
15
|
+
["diagnostic/structural/measure-contract","Measure keys match their declared sources","fail"],
|
|
16
|
+
["diagnostic/structural/loss-completeness","Loss records are complete","fail"],
|
|
17
|
+
["diagnostic/structural/exposure-completeness","Exposure records are complete and finite","fail"],
|
|
18
|
+
["diagnostic/structural/loss-without-exposure","Loss cells have required exposure","warning"],
|
|
19
|
+
["diagnostic/structural/exposure-without-loss","Exposures attach to retained loss cells","warning"],
|
|
20
|
+
["diagnostic/structural/expected-cell-coverage","Expected cells are present","fail"],
|
|
21
|
+
["diagnostic/structural/grouping-consistency","Grouping assignments are consistent","fail"],
|
|
22
|
+
["diagnostic/structural/cached-formula-provenance","Cached formulas retain provenance","warning"],
|
|
23
|
+
] as const;
|
|
24
|
+
const codeToCheck:Record<string,string>={"duplicate-loss-record-id":fixed[0][0],"duplicate-claim-snapshot":fixed[0][0],"claim-identity-conflict":fixed[0][0],"duplicate-aggregate-snapshot":fixed[0][0],"duplicate-exposure-identity":fixed[1][0],"conflicting-exposure-identity":fixed[1][0],"unknown-origin-period":fixed[2][0],"unknown-valuation-period":fixed[2][0],"valuation-before-origin":fixed[2][0],"unsafe-development-age":fixed[2][0],"undeclared-loss-measure":fixed[3][0],"wrong-source-loss-measure":fixed[3][0],"undeclared-exposure-measure":fixed[3][0],"wrong-source-exposure-measure":fixed[3][0],"incomplete-loss-record":fixed[4][0],"missing-exposure-value":fixed[5][0],"incomplete-exposure":fixed[5][0],"non-finite-exposure":fixed[5][0],"loss-without-exposure":fixed[6][0],"exposure-without-loss":fixed[7][0],"missing-expected-cell":fixed[8][0]};
|
|
25
|
+
function freeze<T>(value:T):DiagnosticDeepReadonly<T>{if(value&&typeof value==="object"){for(const child of Object.values(value as Record<string,unknown>))freeze(child);Object.freeze(value)}return value as DiagnosticDeepReadonly<T>}
|
|
26
|
+
|
|
27
|
+
export function reviewPreparedDiagnosticData(input:ReviewPreparedDiagnosticDataInput):DiagnosticReviewReceipt{
|
|
28
|
+
// Authenticity is enforced by the core evaluator before evidence can affect a receipt.
|
|
29
|
+
const evaluations=evaluateDiagnosticReviewRules(input.prepared);
|
|
30
|
+
const evidence=input.evidence===null?null:freeze(structuredClone(input.evidence));
|
|
31
|
+
const findingsByCheck=new Map<string,DataFinding[]>(fixed.map(([id])=>[id,[] as DataFinding[]]));
|
|
32
|
+
for(const finding of input.prepared.findings){const id=codeToCheck[finding.code];if(id)findingsByCheck.get(id)!.push({code:finding.code,message:finding.message,context:{measureId:finding.measureId,sourceGroup:finding.sourceGroup,origin:finding.origin,valuation:finding.valuation,developmentAge:finding.developmentAge,ageUnit:finding.ageUnit,sources:finding.sources}})}
|
|
33
|
+
if(evidence){const assignments=new Map<string,Set<string>>();for(const item of evidence.groupingAssignments){const values=assignments.get(item.key)??new Set<string>();values.add(item.group);assignments.set(item.key,values)}for(const [key,groups] of assignments)if(groups.size>1)findingsByCheck.get(fixed[9][0])!.push({code:"inconsistent-group-mapping",message:"Grouping evidence assigns one key to multiple groups",context:{groupingKey:key,sources:[]}});for(const item of evidence.cachedFormulas)if(item.declaredFormulaSource&&(item.formula===undefined||item.formula.length===0||item.cachedValue===undefined||item.source===undefined))findingsByCheck.get(fixed[10][0])!.push({code:"cached-formula-provenance",message:"Declared formula-derived value lacks complete formula provenance",context:{cachedEvidenceId:item.id,sources:item.source?[item.source]:[]}})}
|
|
34
|
+
const checks:DataCheck[]=fixed.map(([id,description,severity],index)=>{if((index===9||index===10)&&evidence===null)return createNotEvaluatedDataCheck(id,description,"review evidence was omitted");return createStructuredDataCheck(id,description,severity,findingsByCheck.get(id)!)});
|
|
35
|
+
for(const rule of input.prepared.definition.definition.reviewRules){const matching=evaluations.filter((item)=>item.ruleId===rule.id);const status=matching.some((item)=>item.status==="triggered"&&item.severity==="fail")?"fail":matching.some((item)=>item.status==="triggered")?"warning":matching.some((item)=>item.status==="not-evaluated")?"not-evaluated":"pass";const findings=matching.filter((item)=>item.status==="triggered").map((item)=>({code:rule.code,message:rule.description,context:{ruleId:rule.id,reviewScope:item.reviewScope,sources:item.reviewScope.sources}}));checks.push({id:rule.id,description:rule.description,status,details:findings.slice(0,20).map((item)=>item.message),findings})}
|
|
36
|
+
const report=freeze(summarizeDataChecks(checks));
|
|
37
|
+
const identityBody=freeze({definitionIntegrity:input.prepared.definition.definitionIntegrity,preparationFingerprint:input.prepared.preparationFingerprint,evidence,checks:report.checks.map((check)=>({id:check.id,status:check.status,findings:check.findings})),summary:report.summary,evaluations});
|
|
38
|
+
return freeze({report,evaluations,evidence,identityBody,reportFingerprint:`fnv1a64-jcs-v1:${fnv1a64(canonicalJson({identityVersion:1,kind:"diagnostic-review",review:identityBody}))}`});
|
|
39
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -2,7 +2,10 @@ export * from "./csv.js";
|
|
|
2
2
|
export * from "./annualDevelopment.js";
|
|
3
3
|
export * from "./exposure.js";
|
|
4
4
|
export * from "./diagnosticInput.js";
|
|
5
|
-
export * from "./
|
|
5
|
+
export * from "./diagnosticDefinition.js";
|
|
6
|
+
export * from "./version.js";
|
|
7
|
+
export * from "./diagnosticPreparedReview.js";
|
|
8
|
+
export * from "./casualtyDiagnosticReview.js";
|
|
6
9
|
export * from "./lossRun.js";
|
|
7
10
|
export * from "./longFormat.js";
|
|
8
11
|
export * from "./review.js";
|