@actuarial-ts/core 0.5.0 → 0.6.1
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 +65 -226
- package/dist/capping.d.ts.map +1 -1
- package/dist/capping.js +39 -6
- package/dist/capping.js.map +1 -1
- package/dist/casualtyDiagnostics.d.ts +19 -49
- package/dist/casualtyDiagnostics.d.ts.map +1 -1
- package/dist/casualtyDiagnostics.js +84 -116
- package/dist/casualtyDiagnostics.js.map +1 -1
- package/dist/diagnosticAggregation.d.ts +32 -0
- package/dist/diagnosticAggregation.d.ts.map +1 -0
- package/dist/diagnosticAggregation.js +73 -0
- package/dist/diagnosticAggregation.js.map +1 -0
- package/dist/diagnosticDefinitions.d.ts +289 -0
- package/dist/diagnosticDefinitions.d.ts.map +1 -0
- package/dist/diagnosticDefinitions.js +1688 -0
- package/dist/diagnosticDefinitions.js.map +1 -0
- package/dist/diagnosticDerivations.d.ts +35 -0
- package/dist/diagnosticDerivations.d.ts.map +1 -0
- package/dist/diagnosticDerivations.js +224 -0
- package/dist/diagnosticDerivations.js.map +1 -0
- package/dist/diagnosticExposure.d.ts +51 -0
- package/dist/diagnosticExposure.d.ts.map +1 -0
- package/dist/diagnosticExposure.js +273 -0
- package/dist/diagnosticExposure.js.map +1 -0
- package/dist/diagnosticExpressions.d.ts +56 -0
- package/dist/diagnosticExpressions.d.ts.map +1 -0
- package/dist/diagnosticExpressions.js +124 -0
- package/dist/diagnosticExpressions.js.map +1 -0
- package/dist/diagnosticFormulas.d.ts +198 -0
- package/dist/diagnosticFormulas.d.ts.map +1 -0
- package/dist/diagnosticFormulas.js +219 -0
- package/dist/diagnosticFormulas.js.map +1 -0
- package/dist/diagnosticIdentity.d.ts +251 -0
- package/dist/diagnosticIdentity.d.ts.map +1 -0
- package/dist/diagnosticIdentity.js +721 -0
- package/dist/diagnosticIdentity.js.map +1 -0
- package/dist/diagnosticOrdering.d.ts +8 -0
- package/dist/diagnosticOrdering.d.ts.map +1 -0
- package/dist/diagnosticOrdering.js +73 -0
- package/dist/diagnosticOrdering.js.map +1 -0
- package/dist/diagnosticPeriodAxis.d.ts +9 -0
- package/dist/diagnosticPeriodAxis.d.ts.map +1 -0
- package/dist/diagnosticPeriodAxis.js +69 -0
- package/dist/diagnosticPeriodAxis.js.map +1 -0
- package/dist/diagnosticPeriods.d.ts +15 -0
- package/dist/diagnosticPeriods.d.ts.map +1 -0
- package/dist/diagnosticPeriods.js +50 -0
- package/dist/diagnosticPeriods.js.map +1 -0
- package/dist/diagnosticPreparation.d.ts +131 -0
- package/dist/diagnosticPreparation.d.ts.map +1 -0
- package/dist/diagnosticPreparation.js +1539 -0
- package/dist/diagnosticPreparation.js.map +1 -0
- package/dist/diagnosticReview.d.ts +66 -0
- package/dist/diagnosticReview.d.ts.map +1 -0
- package/dist/diagnosticReview.js +490 -0
- package/dist/diagnosticReview.js.map +1 -0
- package/dist/diagnosticRules.d.ts +32 -0
- package/dist/diagnosticRules.d.ts.map +1 -0
- package/dist/diagnosticRules.js +32 -0
- package/dist/diagnosticRules.js.map +1 -0
- package/dist/diagnosticRunner.d.ts +86 -0
- package/dist/diagnosticRunner.d.ts.map +1 -0
- package/dist/diagnosticRunner.js +703 -0
- package/dist/diagnosticRunner.js.map +1 -0
- package/dist/diagnosticRuntime.d.ts +26 -0
- package/dist/diagnosticRuntime.d.ts.map +1 -0
- package/dist/diagnosticRuntime.js +243 -0
- package/dist/diagnosticRuntime.js.map +1 -0
- package/dist/diagnosticSourceOrdering.d.ts +6 -0
- package/dist/diagnosticSourceOrdering.d.ts.map +1 -0
- package/dist/diagnosticSourceOrdering.js +38 -0
- package/dist/diagnosticSourceOrdering.js.map +1 -0
- package/dist/index.d.ts +28 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -1
- package/dist/index.js.map +1 -1
- package/dist/mack.d.ts +4 -0
- package/dist/mack.d.ts.map +1 -1
- package/dist/mack.js +32 -4
- package/dist/mack.js.map +1 -1
- package/dist/triangle.d.ts.map +1 -1
- package/dist/triangle.js +59 -9
- package/dist/triangle.js.map +1 -1
- package/dist/types.d.ts +21 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +128 -0
- package/dist/types.js.map +1 -1
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/package.json +4 -3
- package/src/capping.ts +109 -18
- package/src/casualtyDiagnostics.ts +79 -189
- package/src/diagnosticAggregation.ts +128 -0
- package/src/diagnosticDefinitions.ts +3624 -0
- package/src/diagnosticDerivations.ts +321 -0
- package/src/diagnosticExposure.ts +482 -0
- package/src/diagnosticExpressions.ts +255 -0
- package/src/diagnosticFormulas.ts +350 -0
- package/src/diagnosticIdentity.ts +1267 -0
- package/src/diagnosticOrdering.ts +106 -0
- package/src/diagnosticPeriodAxis.ts +92 -0
- package/src/diagnosticPeriods.ts +102 -0
- package/src/diagnosticPreparation.ts +2475 -0
- package/src/diagnosticReview.ts +897 -0
- package/src/diagnosticRules.ts +69 -0
- package/src/diagnosticRunner.ts +1114 -0
- package/src/diagnosticRuntime.ts +264 -0
- package/src/diagnosticSourceOrdering.ts +50 -0
- package/src/index.ts +184 -1
- package/src/mack.ts +72 -9
- package/src/triangle.ts +103 -13
- package/src/types.ts +196 -0
- package/src/version.ts +2 -0
- package/dist/metricDiagnostics.d.ts +0 -212
- package/dist/metricDiagnostics.d.ts.map +0 -1
- package/dist/metricDiagnostics.js +0 -627
- package/dist/metricDiagnostics.js.map +0 -1
- package/src/metricDiagnostics.ts +0 -876
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { DiagnosticComparisonPredicate, DiagnosticSourceLocation } from "./diagnosticDefinitions.js";
|
|
2
|
+
|
|
3
|
+
export type DiagnosticComparisonClassification =
|
|
4
|
+
| { readonly status: "evaluated"; readonly relation: "less" | "equal" | "greater" }
|
|
5
|
+
| { readonly status: "not-evaluated"; readonly reason: "missing" | "non-finite" | "tolerance-overflow" };
|
|
6
|
+
|
|
7
|
+
export type DiagnosticRuleNotEvaluatedReason =
|
|
8
|
+
| "missing"
|
|
9
|
+
| "imputed"
|
|
10
|
+
| "non-finite"
|
|
11
|
+
| "structural-ambiguity"
|
|
12
|
+
| "aggregation-overflow"
|
|
13
|
+
| "expression-overflow"
|
|
14
|
+
| "tolerance-overflow";
|
|
15
|
+
|
|
16
|
+
export interface DiagnosticExpressionOverflow {
|
|
17
|
+
readonly expressionPath: string;
|
|
18
|
+
readonly sources: readonly DiagnosticSourceLocation[];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface DiagnosticRuleEvaluation {
|
|
22
|
+
readonly ruleId: string;
|
|
23
|
+
readonly status: "pass" | "triggered" | "not-evaluated";
|
|
24
|
+
readonly severity: "warning" | "fail";
|
|
25
|
+
readonly left: number | null;
|
|
26
|
+
readonly right: number | null;
|
|
27
|
+
readonly relation: "less" | "equal" | "greater" | null;
|
|
28
|
+
readonly notEvaluatedReasons: readonly DiagnosticRuleNotEvaluatedReason[];
|
|
29
|
+
readonly expressionOverflows: readonly DiagnosticExpressionOverflow[];
|
|
30
|
+
readonly code: string | null;
|
|
31
|
+
readonly message: string | null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Pure, overflow-safe three-way comparison shared by metric and review rules. */
|
|
35
|
+
export function classifyDiagnosticComparison(
|
|
36
|
+
left: number | null,
|
|
37
|
+
right: number | null,
|
|
38
|
+
tolerance: { readonly absolute?: number; readonly relative?: number } = {},
|
|
39
|
+
): DiagnosticComparisonClassification {
|
|
40
|
+
if (left === null || right === null) return { status: "not-evaluated", reason: "missing" };
|
|
41
|
+
if (!Number.isFinite(left) || !Number.isFinite(right)) return { status: "not-evaluated", reason: "non-finite" };
|
|
42
|
+
const absolute = tolerance.absolute ?? 0;
|
|
43
|
+
const relative = tolerance.relative ?? 0;
|
|
44
|
+
const scale = Math.max(1, Math.abs(left), Math.abs(right));
|
|
45
|
+
const relativeTolerance = relative * scale;
|
|
46
|
+
const totalTolerance = absolute + relativeTolerance;
|
|
47
|
+
if (!Number.isFinite(absolute) || absolute < 0 || !Number.isFinite(relative) || relative < 0 ||
|
|
48
|
+
!Number.isFinite(relativeTolerance) || !Number.isFinite(totalTolerance)) {
|
|
49
|
+
return { status: "not-evaluated", reason: "tolerance-overflow" };
|
|
50
|
+
}
|
|
51
|
+
if (left === right) return { status: "evaluated", relation: "equal" };
|
|
52
|
+
const distance = left > right ? left - right : right - left;
|
|
53
|
+
if (Number.isFinite(distance) && distance <= totalTolerance) {
|
|
54
|
+
return { status: "evaluated", relation: "equal" };
|
|
55
|
+
}
|
|
56
|
+
return { status: "evaluated", relation: left < right ? "less" : "greater" };
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export function diagnosticPredicateMatches(
|
|
60
|
+
predicate: DiagnosticComparisonPredicate["operator"],
|
|
61
|
+
relation: "less" | "equal" | "greater",
|
|
62
|
+
): boolean {
|
|
63
|
+
return predicate === "lt" ? relation === "less"
|
|
64
|
+
: predicate === "lte" ? relation !== "greater"
|
|
65
|
+
: predicate === "eq" ? relation === "equal"
|
|
66
|
+
: predicate === "neq" ? relation !== "equal"
|
|
67
|
+
: predicate === "gte" ? relation !== "less"
|
|
68
|
+
: relation === "greater";
|
|
69
|
+
}
|