@actuarial-ts/data 0.4.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
package/README.md
CHANGED
|
@@ -1,148 +1,66 @@
|
|
|
1
1
|
# @actuarial-ts/data
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
[actuarial-ts](../core) SDK. Pure functions, fully typed, with runtime schemas
|
|
5
|
-
at object boundaries.
|
|
6
|
-
|
|
7
|
-
- `parseCsv(text)` — minimal RFC 4180-subset CSV parser (quoted fields,
|
|
8
|
-
escaped quotes, embedded commas/newlines, BOM, CRLF/LF); the result's
|
|
9
|
-
`rowLines` gives each row's 1-based physical start line in the file.
|
|
10
|
-
- `parseLossRunCsv(text)` — loss-run import to `ClaimSnapshot[]` with
|
|
11
|
-
per-row validation errors (errors cite 1-based physical file lines,
|
|
12
|
-
header = line 1).
|
|
13
|
-
- `annualDevelopmentToClaimSnapshots(rows, options)` — converts claim
|
|
14
|
-
valuations known only to annual precision without hiding the derived-date,
|
|
15
|
-
report-year, or duplicate-row conventions.
|
|
16
|
-
- `parseExposureCsv(text)` — imports earned premium and/or exposure units by
|
|
17
|
-
origin; extra source measures remain extra rather than being relabeled.
|
|
18
|
-
- `triangleFromLongFormat(rows, { kind })` — pivots long-format
|
|
19
|
-
`(origin, age, value)` rows into a `Triangle`.
|
|
20
|
-
- `reviewClaimData(claims, { asOfDate? })` / `reviewTriangles(paid, incurred)`
|
|
21
|
-
— the ASOP No. 23-oriented review; every check performed is listed in the
|
|
22
|
-
report, pass or fail, so the actuary's disclosure can state what WAS
|
|
23
|
-
reviewed, not just what was found.
|
|
24
|
-
- `validateDiagnosticDataset(value)` /
|
|
25
|
-
`validateAndReconcileDiagnosticExposures(value)` /
|
|
26
|
-
`runValidatedMetricDiagnostics(...)` — Zod-validated boundaries plus
|
|
27
|
-
stable-key exposure reconciliation for generic diagnostic rows.
|
|
28
|
-
- `reviewDiagnosticData(snapshots, exposures, options)` — quarterly aggregate,
|
|
29
|
-
exposure, layer, grouping, and cached-formula checks using the same
|
|
30
|
-
`DataReviewReport` status contract, with optional structured finding context.
|
|
31
|
-
|
|
32
|
-
## Checks
|
|
33
|
-
|
|
34
|
-
### `reviewClaimData`
|
|
35
|
-
|
|
36
|
-
| id | status when found | what it finds |
|
|
37
|
-
|----|-------------------|---------------|
|
|
38
|
-
| `negative-paid` | fail | cumulative paid < 0 |
|
|
39
|
-
| `negative-case` | warning | case reserve < 0 (legitimate but rare) |
|
|
40
|
-
| `paid-decreasing` | fail | cumulative paid decreasing across a claim's snapshots ordered by evaluation date |
|
|
41
|
-
| `date-order` | fail | report before accident, or evaluation before report |
|
|
42
|
-
| `duplicate-snapshot` | fail | same claimId + evaluationDate twice |
|
|
43
|
-
| `future-dated` | fail | any claim date after `asOfDate` (not evaluated when `asOfDate` is omitted) |
|
|
44
|
-
| `closed-with-case` | warning | closed claim still carrying case reserve |
|
|
45
|
-
|
|
46
|
-
### `reviewTriangles`
|
|
47
|
-
|
|
48
|
-
| id | status when found | what it finds |
|
|
49
|
-
|----|-------------------|---------------|
|
|
50
|
-
| `shape-mismatch` | fail | origins/ages differ between paid and incurred (blocks cell-level checks, which stay listed as "not evaluated") |
|
|
51
|
-
| `paid-exceeds-incurred` | fail | paid > incurred in a cell (1e-9 relative tolerance) |
|
|
52
|
-
| `negative-incremental-paid` | warning | cumulative paid decreasing along a row (salvage/subrogation makes this legal but reportable) |
|
|
53
|
-
| `negative-incremental-incurred` | warning | cumulative incurred decreasing along a row |
|
|
54
|
-
| `interior-missing` | warning | a null cell with observed cells both before and after it in the same row |
|
|
55
|
-
|
|
56
|
-
## Quickstart
|
|
3
|
+
Typed ingestion, preparation, and data-review boundaries for the actuarial-ts SDK. It supports loss-run/exposure CSVs, annual claim-development adaptation, triangle assembly, and generalized diagnostic review designed to support ASOP No. 23 work.
|
|
57
4
|
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
|
|
5
|
+
```bash
|
|
6
|
+
npm install @actuarial-ts/data@0.6.0 @actuarial-ts/core@0.6.0
|
|
7
|
+
```
|
|
61
8
|
|
|
62
|
-
|
|
63
|
-
if (errors.length > 0) console.warn(errors); // caller decides: abort or proceed
|
|
9
|
+
Node 20+, ESM. Responsibility for the review and resulting actuarial work remains with the actuary.
|
|
64
10
|
|
|
65
|
-
|
|
11
|
+
## Existing ingestion and triangle review
|
|
66
12
|
|
|
67
|
-
|
|
68
|
-
cadence: "annual",
|
|
69
|
-
asOfDate: "2023-12-31",
|
|
70
|
-
});
|
|
71
|
-
const triangleReview = reviewTriangles(paid, incurred);
|
|
72
|
-
```
|
|
13
|
+
`parseLossRunCsv`, `parseExposureCsv`, `adaptAnnualClaimDevelopment`, `triangleFromLongFormat`, `reviewClaimData`, and `reviewTriangles` return structured errors/findings rather than silently cleaning source records. Physical source-line numbers are retained where available.
|
|
73
14
|
|
|
74
|
-
|
|
15
|
+
## Diagnostic run boundary
|
|
75
16
|
|
|
76
|
-
|
|
77
|
-
the source fields to annual rows, then let the adapter derive calendar-year-end
|
|
78
|
-
compatibility dates and return the convention as a disclosure finding:
|
|
17
|
+
Use `validateDiagnosticRunInput` before `runValidatedMetricDiagnostics`. Validation parses the entire configuration atomically and compiles its definition; no partially validated run escapes.
|
|
79
18
|
|
|
80
19
|
```ts
|
|
81
|
-
import {
|
|
82
|
-
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
20
|
+
import { runValidatedMetricDiagnostics, validateDiagnosticRunInput } from "@actuarial-ts/data";
|
|
21
|
+
|
|
22
|
+
const validated = validateDiagnosticRunInput({
|
|
23
|
+
definition,
|
|
24
|
+
losses: [{
|
|
25
|
+
rowType: "aggregate",
|
|
26
|
+
recordId: "loss-1",
|
|
27
|
+
sourceGroup: "fleet-a",
|
|
28
|
+
origin: "2025",
|
|
29
|
+
valuation: "2025-03-31",
|
|
30
|
+
complete: true,
|
|
31
|
+
source: { artifactId: "loss-run", sourceRow: 2 },
|
|
32
|
+
measures: { reported: 4, "gross-paid": 100, "gross-incurred": 160 },
|
|
91
33
|
}],
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
or both. Each numeric measure may be blank independently. For example, a
|
|
108
|
-
source containing insurance-years and gross written premium should expose only
|
|
109
|
-
the insurance-years to the SDK unless an earned-premium transformation has
|
|
110
|
-
actually been performed:
|
|
34
|
+
exposures: [{
|
|
35
|
+
key: "exp-2025",
|
|
36
|
+
sourceGroup: "fleet-a",
|
|
37
|
+
origin: "2025",
|
|
38
|
+
measureId: "earned-vehicle-years",
|
|
39
|
+
value: 20,
|
|
40
|
+
complete: true,
|
|
41
|
+
source: { artifactId: "exposures", sourceRow: 2 },
|
|
42
|
+
}],
|
|
43
|
+
filter: { sourceGroups: ["fleet-a"], instanceIds: ["casualty/count/reported-frequency"] },
|
|
44
|
+
groupMap: { "fleet-a": "all-fleet" },
|
|
45
|
+
groupDimensions: { "all-fleet": { region: "all" } },
|
|
46
|
+
runPresetId: "annual-review-v1",
|
|
47
|
+
datasetArtifactId: "loss-run",
|
|
48
|
+
});
|
|
111
49
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
2024,125000,42000000
|
|
50
|
+
const outcome = runValidatedMetricDiagnostics(validated);
|
|
51
|
+
if (outcome.status !== "completed") console.error(outcome.stage, outcome.review.report);
|
|
115
52
|
```
|
|
116
53
|
|
|
117
|
-
The
|
|
118
|
-
it is never silently loaded as `earnedPremium`.
|
|
119
|
-
|
|
120
|
-
### Quarterly diagnostic review
|
|
54
|
+
Loss rows use `sourceGroup`; output `group` exists only after explicit mapping. Exposure observations are long-form and measure-specific. `origin-static` exposures ignore valuation filters but honor source-group/origin selection; `valuation-specific` exposures require and honor a valuation. The pre-exclusion audit retains invalid, cutoff, filtered, and retained inputs. Omitted and explicitly empty expected-cell grids remain distinct.
|
|
121
55
|
|
|
122
|
-
`
|
|
123
|
-
`DIAGNOSTIC_REVIEW_CHECK_CODES`. The suite covers duplicate aggregate and
|
|
124
|
-
exposure keys; invalid or mismatched development ages; valuation-before-origin;
|
|
125
|
-
count identities; paid/incurred and cumulative movement checks; reopen
|
|
126
|
-
signals; layer ordering and control totals; both sides of the loss/exposure
|
|
127
|
-
join; zero/incomplete exposure; grouping consistency; and lightweight cached
|
|
128
|
-
formula provenance.
|
|
56
|
+
Review happens before output-group filtering and calculation. The structural catalog checks identities, periods, measure/source contracts, completeness, exposure attachment, expected-cell coverage, grouping evidence, and cached-formula provenance in deterministic order. Full findings retain code, message, complete source unions, origin, valuation, derived development age, and unit. `not-evaluated` is not treated as pass.
|
|
129
57
|
|
|
130
|
-
|
|
131
|
-
populate `DataCheck.findings` with optional `origin`, `valuation`, `ageMonths`,
|
|
132
|
-
`group`, `sourceFile`, and `sourceRow` context so consumers need not parse
|
|
133
|
-
prose. Severities and numeric tolerances are caller-configurable. Optional
|
|
134
|
-
checks without configuration report `not-evaluated`, never a misleading pass.
|
|
58
|
+
Definitions add declarative `compare`, `reconcile`, `monotonic`, `layer-order`, and `control-total` review rules. `createCasualtyDiagnosticReviewRules` is an optional convenience factory, not a fixed taxonomy. Missing rule inputs follow each rule’s explicit `not-evaluated` or `finding` policy. Review and metric gates have separate allowed status/severity sets; permitting a fail requires a nonblank rationale reference.
|
|
135
59
|
|
|
136
|
-
|
|
137
|
-
`runValidatedMetricDiagnostics`) before the core analysis. For workbook input,
|
|
138
|
-
extract rows with the host's spreadsheet tooling and pass cached formula
|
|
139
|
-
metadata to the review; this package deliberately does not add a heavyweight
|
|
140
|
-
XLSX dependency.
|
|
60
|
+
Completed outcomes are owner-branded and include the exact prepared data, review receipt, run preset, dataset artifact, grouping, result, and two-gate receipt. Compliance provenance accepts only that completed object.
|
|
141
61
|
|
|
142
|
-
|
|
143
|
-
ASOP No. 23; responsibility for compliance remains with the credentialed
|
|
144
|
-
actuary.
|
|
62
|
+
See the [formula catalog](https://github.com/yerromnitsuj/actng/blob/v0.6.0/docs/reference/diagnostic-formulas.md) and [migration guide](https://github.com/yerromnitsuj/actng/blob/v0.6.0/docs/migrations/0.6-generalized-diagnostics.md).
|
|
145
63
|
|
|
146
64
|
## License
|
|
147
65
|
|
|
148
|
-
Apache-2.0. See
|
|
66
|
+
Apache-2.0. See LICENSE and NOTICE.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { CasualtyCountBindings, DiagnosticControlTotalProjection, DiagnosticMeasureExpression, DiagnosticReviewFilter, DiagnosticReviewRule } from "@actuarial-ts/core";
|
|
2
|
+
export interface CasualtyMonotonicReviewBinding {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly expression: DiagnosticMeasureExpression;
|
|
5
|
+
readonly direction: "nondecreasing" | "nonincreasing";
|
|
6
|
+
readonly tolerance?: {
|
|
7
|
+
readonly absolute?: number;
|
|
8
|
+
readonly relative?: number;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export interface CasualtyLayerOrderReviewBinding {
|
|
12
|
+
readonly id: string;
|
|
13
|
+
readonly narrower: DiagnosticMeasureExpression;
|
|
14
|
+
readonly broader: DiagnosticMeasureExpression;
|
|
15
|
+
readonly comparability: {
|
|
16
|
+
readonly kind: "compiler-proven";
|
|
17
|
+
} | {
|
|
18
|
+
readonly kind: "caller-asserted";
|
|
19
|
+
readonly rationaleArtifactId: string;
|
|
20
|
+
};
|
|
21
|
+
readonly tolerance?: {
|
|
22
|
+
readonly absolute?: number;
|
|
23
|
+
readonly relative?: number;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export interface CasualtyControlTotalReviewBinding {
|
|
27
|
+
readonly id: string;
|
|
28
|
+
readonly expression: DiagnosticMeasureExpression;
|
|
29
|
+
readonly expected: number;
|
|
30
|
+
readonly filter?: DiagnosticReviewFilter;
|
|
31
|
+
readonly projection: DiagnosticControlTotalProjection;
|
|
32
|
+
readonly tolerance?: {
|
|
33
|
+
readonly absolute?: number;
|
|
34
|
+
readonly relative?: number;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export interface CreateCasualtyDiagnosticReviewRulesInput {
|
|
38
|
+
readonly counts: CasualtyCountBindings;
|
|
39
|
+
readonly exposure: string;
|
|
40
|
+
readonly monotonicMeasures: readonly CasualtyMonotonicReviewBinding[];
|
|
41
|
+
readonly layerOrders: readonly CasualtyLayerOrderReviewBinding[];
|
|
42
|
+
readonly controlTotals: readonly CasualtyControlTotalReviewBinding[];
|
|
43
|
+
readonly severityOverrides?: Readonly<Record<string, "warning" | "fail">>;
|
|
44
|
+
}
|
|
45
|
+
export declare function createCasualtyDiagnosticReviewRules(input: CreateCasualtyDiagnosticReviewRulesInput): readonly DiagnosticReviewRule[];
|
|
46
|
+
//# sourceMappingURL=casualtyDiagnosticReview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"casualtyDiagnosticReview.d.ts","sourceRoot":"","sources":["../src/casualtyDiagnosticReview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,gCAAgC,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE7K,MAAM,WAAW,8BAA8B;IAAG,QAAQ,CAAC,EAAE,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,UAAU,EAAC,2BAA2B,CAAC;IAAA,QAAQ,CAAC,SAAS,EAAC,eAAe,GAAC,eAAe,CAAC;IAAA,QAAQ,CAAC,SAAS,CAAC,EAAC;QAAC,QAAQ,CAAC,QAAQ,CAAC,EAAC,MAAM,CAAC;QAAA,QAAQ,CAAC,QAAQ,CAAC,EAAC,MAAM,CAAA;KAAC,CAAA;CAAE;AACnP,MAAM,WAAW,+BAA+B;IAAG,QAAQ,CAAC,EAAE,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,QAAQ,EAAC,2BAA2B,CAAC;IAAA,QAAQ,CAAC,OAAO,EAAC,2BAA2B,CAAC;IAAA,QAAQ,CAAC,aAAa,EAAC;QAAC,QAAQ,CAAC,IAAI,EAAC,iBAAiB,CAAA;KAAC,GAAC;QAAC,QAAQ,CAAC,IAAI,EAAC,iBAAiB,CAAC;QAAA,QAAQ,CAAC,mBAAmB,EAAC,MAAM,CAAA;KAAC,CAAC;IAAA,QAAQ,CAAC,SAAS,CAAC,EAAC;QAAC,QAAQ,CAAC,QAAQ,CAAC,EAAC,MAAM,CAAC;QAAA,QAAQ,CAAC,QAAQ,CAAC,EAAC,MAAM,CAAA;KAAC,CAAA;CAAE;AAC3W,MAAM,WAAW,iCAAiC;IAAG,QAAQ,CAAC,EAAE,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,UAAU,EAAC,2BAA2B,CAAC;IAAA,QAAQ,CAAC,QAAQ,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,MAAM,CAAC,EAAC,sBAAsB,CAAC;IAAA,QAAQ,CAAC,UAAU,EAAC,gCAAgC,CAAC;IAAA,QAAQ,CAAC,SAAS,CAAC,EAAC;QAAC,QAAQ,CAAC,QAAQ,CAAC,EAAC,MAAM,CAAC;QAAA,QAAQ,CAAC,QAAQ,CAAC,EAAC,MAAM,CAAA;KAAC,CAAA;CAAE;AACzT,MAAM,WAAW,wCAAwC;IAAG,QAAQ,CAAC,MAAM,EAAC,qBAAqB,CAAC;IAAA,QAAQ,CAAC,QAAQ,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,iBAAiB,EAAC,SAAS,8BAA8B,EAAE,CAAC;IAAA,QAAQ,CAAC,WAAW,EAAC,SAAS,+BAA+B,EAAE,CAAC;IAAA,QAAQ,CAAC,aAAa,EAAC,SAAS,iCAAiC,EAAE,CAAC;IAAA,QAAQ,CAAC,iBAAiB,CAAC,EAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAC,SAAS,GAAC,MAAM,CAAC,CAAC,CAAA;CAAE;AAE3Y,wBAAgB,mCAAmC,CAAC,KAAK,EAAC,wCAAwC,GAAE,SAAS,oBAAoB,EAAE,CASlI"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const m = (measureId) => ({ op: "measure", measureId });
|
|
2
|
+
const tolerance = (value) => ({ absolute: value?.absolute ?? 0, relative: value?.relative ?? 0 });
|
|
3
|
+
export function createCasualtyDiagnosticReviewRules(input) {
|
|
4
|
+
const fixed = [
|
|
5
|
+
{ 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)] } },
|
|
6
|
+
{ 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) } },
|
|
7
|
+
{ 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 } } },
|
|
8
|
+
{ 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" },
|
|
9
|
+
];
|
|
10
|
+
const dynamic = [...input.monotonicMeasures.map((item) => ({ 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) => ({ 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) => ({ 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 }))];
|
|
11
|
+
const all = [...fixed, ...dynamic];
|
|
12
|
+
const ids = new Set();
|
|
13
|
+
for (const rule of all) {
|
|
14
|
+
if (ids.has(rule.id))
|
|
15
|
+
throw new Error(`Duplicate review rule ID ${rule.id}`);
|
|
16
|
+
ids.add(rule.id);
|
|
17
|
+
}
|
|
18
|
+
for (const key of Object.keys(input.severityOverrides ?? {}))
|
|
19
|
+
if (!ids.has(key))
|
|
20
|
+
throw new Error(`Unknown severity override ${key}`);
|
|
21
|
+
return Object.freeze(all.map((rule) => Object.freeze({ ...rule, severity: input.severityOverrides?.[rule.id] ?? rule.severity })));
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=casualtyDiagnosticReview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"casualtyDiagnosticReview.js","sourceRoot":"","sources":["../src/casualtyDiagnosticReview.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,GAAC,CAAC,SAAgB,EAAC,EAAE,CAAA,CAAC,EAAC,EAAE,EAAC,SAAkB,EAAC,SAAS,EAAC,CAAC,CAAC;AAAA,MAAM,SAAS,GAAC,CAAC,KAAmD,EAAC,EAAE,CAAA,CAAC,EAAC,QAAQ,EAAC,KAAK,EAAE,QAAQ,IAAE,CAAC,EAAC,QAAQ,EAAC,KAAK,EAAE,QAAQ,IAAE,CAAC,EAAC,CAAC,CAAC;AACnM,MAAM,UAAU,mCAAmC,CAAC,KAA8C;IAChG,MAAM,KAAK,GAAwB;QACjC,EAAC,IAAI,EAAC,WAAW,EAAC,EAAE,EAAC,sCAAsC,EAAC,IAAI,EAAC,sBAAsB,EAAC,WAAW,EAAC,8EAA8E,EAAC,QAAQ,EAAC,MAAM,EAAC,YAAY,EAAC,eAAe,EAAC,SAAS,EAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,EAAC,MAAM,EAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAC,QAAQ,EAAC,EAAC,EAAE,EAAC,KAAK,EAAC,KAAK,EAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,EAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAC,EAAC;QAC7Y,EAAC,IAAI,EAAC,SAAS,EAAC,EAAE,EAAC,qCAAqC,EAAC,IAAI,EAAC,qBAAqB,EAAC,WAAW,EAAC,oDAAoD,EAAC,QAAQ,EAAC,MAAM,EAAC,YAAY,EAAC,eAAe,EAAC,SAAS,EAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,EAAC,IAAI,EAAC,EAAC,IAAI,EAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,EAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,EAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAC,EAAC;QACzT,EAAC,IAAI,EAAC,SAAS,EAAC,EAAE,EAAC,mCAAmC,EAAC,IAAI,EAAC,mBAAmB,EAAC,WAAW,EAAC,oCAAoC,EAAC,QAAQ,EAAC,MAAM,EAAC,YAAY,EAAC,eAAe,EAAC,SAAS,EAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,EAAC,IAAI,EAAC,EAAC,IAAI,EAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAC,QAAQ,EAAC,KAAK,EAAC,KAAK,EAAC,EAAC,EAAE,EAAC,UAAU,EAAC,KAAK,EAAC,CAAC,EAAC,EAAC,EAAC;QAC3R,EAAC,IAAI,EAAC,WAAW,EAAC,EAAE,EAAC,sCAAsC,EAAC,IAAI,EAAC,sBAAsB,EAAC,WAAW,EAAC,sDAAsD,EAAC,QAAQ,EAAC,SAAS,EAAC,YAAY,EAAC,eAAe,EAAC,SAAS,EAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,EAAC,UAAU,EAAC,EAAC,EAAE,EAAC,KAAK,EAAC,KAAK,EAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,EAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAC,EAAC,SAAS,EAAC,eAAe,EAAC;KAChW,CAAC;IACF,MAAM,OAAO,GAAwB,CAAC,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAsB,EAAE,CAAA,CAAC,EAAC,IAAI,EAAC,WAAW,EAAC,EAAE,EAAC,IAAI,CAAC,EAAE,EAAC,IAAI,EAAC,IAAI,CAAC,EAAE,EAAC,WAAW,EAAC,sBAAsB,IAAI,CAAC,SAAS,oBAAoB,EAAC,QAAQ,EAAC,SAAS,EAAC,YAAY,EAAC,eAAe,EAAC,SAAS,EAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,UAAU,EAAC,IAAI,CAAC,UAAU,EAAC,SAAS,EAAC,IAAI,CAAC,SAAS,EAAC,CAAC,CAAC,EAAC,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAsB,EAAE,CAAA,CAAC,EAAC,IAAI,EAAC,aAAa,EAAC,EAAE,EAAC,IAAI,CAAC,EAAE,EAAC,IAAI,EAAC,IAAI,CAAC,EAAE,EAAC,WAAW,EAAC,sEAAsE,EAAC,QAAQ,EAAC,MAAM,EAAC,YAAY,EAAC,eAAe,EAAC,SAAS,EAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,QAAQ,EAAC,IAAI,CAAC,QAAQ,EAAC,OAAO,EAAC,IAAI,CAAC,OAAO,EAAC,aAAa,EAAC,IAAI,CAAC,aAAa,EAAC,CAAC,CAAC,EAAC,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAsB,EAAE,CAAA,CAAC,EAAC,IAAI,EAAC,eAAe,EAAC,EAAE,EAAC,IAAI,CAAC,EAAE,EAAC,IAAI,EAAC,IAAI,CAAC,EAAE,EAAC,WAAW,EAAC,yDAAyD,EAAC,QAAQ,EAAC,MAAM,EAAC,YAAY,EAAC,eAAe,EAAC,SAAS,EAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,UAAU,EAAC,IAAI,CAAC,UAAU,EAAC,QAAQ,EAAC,IAAI,CAAC,QAAQ,EAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAA,CAAC,CAAA,EAAC,MAAM,EAAC,IAAI,CAAC,MAAM,EAAC,CAAA,CAAC,CAAA,EAAE,CAAC,EAAC,UAAU,EAAC,IAAI,CAAC,UAAU,EAAC,CAAC,CAAC,CAAC,CAAC;IAC5iC,MAAM,GAAG,GAAC,CAAC,GAAG,KAAK,EAAC,GAAG,OAAO,CAAC,CAAC;IAAA,MAAM,GAAG,GAAC,IAAI,GAAG,EAAU,CAAC;IAAA,KAAI,MAAM,IAAI,IAAI,GAAG,EAAC,CAAC;QAAA,IAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAAA,CAAC;IAAA,KAAI,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,IAAE,EAAE,CAAC;QAAC,IAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAC,EAAE,CAAA,MAAM,CAAC,MAAM,CAAC,EAAC,GAAG,IAAI,EAAC,QAAQ,EAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAE,IAAI,CAAC,QAAQ,EAAC,CAAyB,CAAC,CAAC,CAAC;AACnc,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type CompiledDiagnosticDefinition } from "@actuarial-ts/core";
|
|
2
|
+
/** Validates unknown authored definition data through core's single semantic compiler. */
|
|
3
|
+
export declare function validateDiagnosticDefinition(value: unknown): CompiledDiagnosticDefinition;
|
|
4
|
+
//# sourceMappingURL=diagnosticDefinition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnosticDefinition.d.ts","sourceRoot":"","sources":["../src/diagnosticDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,4BAA4B,EAA6B,MAAM,oBAAoB,CAAC;AAE/H,0FAA0F;AAC1F,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,4BAA4B,CAEzF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { compileDiagnosticDefinition } from "@actuarial-ts/core";
|
|
2
|
+
/** Validates unknown authored definition data through core's single semantic compiler. */
|
|
3
|
+
export function validateDiagnosticDefinition(value) {
|
|
4
|
+
return compileDiagnosticDefinition(value);
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=diagnosticDefinition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnosticDefinition.js","sourceRoot":"","sources":["../src/diagnosticDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAgE,MAAM,oBAAoB,CAAC;AAE/H,0FAA0F;AAC1F,MAAM,UAAU,4BAA4B,CAAC,KAAc;IACzD,OAAO,2BAA2B,CAAC,KAA6B,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -1,14 +1,98 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
import { type CompiledDiagnosticDefinition, type DiagnosticCompletePeriodCutoff, type DiagnosticDeepReadonly, type DiagnosticDefinition, type DiagnosticExpectedCell, type DiagnosticExposureObservation, type DiagnosticLossInput, type DiagnosticsFilter, type JsonValue, type MetricDiagnosticsResult } from "@actuarial-ts/core";
|
|
2
|
+
import { type DiagnosticReviewReceipt } from "./diagnosticPreparedReview.js";
|
|
3
|
+
export type DiagnosticAllowedReviewStatus = "pass" | "warning" | "not-evaluated" | "fail";
|
|
4
|
+
export interface DiagnosticExecutionPolicyInput {
|
|
5
|
+
readonly allowedReviewStatuses?: readonly DiagnosticAllowedReviewStatus[];
|
|
6
|
+
readonly allowedMetricFindingSeverities?: readonly ("info" | "warning" | "fail")[];
|
|
7
|
+
readonly rationaleRef?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface DiagnosticRunInput {
|
|
10
|
+
readonly definition: DiagnosticDefinition;
|
|
11
|
+
readonly losses: readonly DiagnosticLossInput[];
|
|
12
|
+
readonly exposures?: readonly DiagnosticExposureObservation[];
|
|
13
|
+
readonly filter?: DiagnosticsFilter;
|
|
14
|
+
readonly completePeriodCutoffs?: readonly DiagnosticCompletePeriodCutoff[];
|
|
15
|
+
readonly expectedCells?: readonly DiagnosticExpectedCell[];
|
|
16
|
+
readonly reviewEvidence?: JsonValue | null;
|
|
17
|
+
readonly runPresetId?: string;
|
|
18
|
+
readonly datasetArtifactId?: string;
|
|
19
|
+
readonly groupMap?: Readonly<Record<string, string>>;
|
|
20
|
+
readonly groupDimensions?: Readonly<Record<string, JsonValue>>;
|
|
21
|
+
readonly policy?: DiagnosticExecutionPolicyInput;
|
|
22
|
+
}
|
|
23
|
+
declare const validatedDiagnosticRunInputBrand: unique symbol;
|
|
24
|
+
export interface ValidatedDiagnosticRunInput {
|
|
25
|
+
readonly [validatedDiagnosticRunInputBrand]: true;
|
|
26
|
+
readonly definition: CompiledDiagnosticDefinition;
|
|
27
|
+
readonly losses: readonly DiagnosticDeepReadonly<DiagnosticLossInput>[];
|
|
28
|
+
readonly exposures: readonly DiagnosticDeepReadonly<DiagnosticExposureObservation>[];
|
|
29
|
+
readonly filter: DiagnosticDeepReadonly<DiagnosticsFilter> | null;
|
|
30
|
+
readonly completePeriodCutoffs: readonly DiagnosticCompletePeriodCutoff[];
|
|
31
|
+
readonly expectedCells: readonly DiagnosticExpectedCell[] | null;
|
|
32
|
+
readonly reviewEvidence: JsonValue | null;
|
|
33
|
+
readonly runPresetId: string | null;
|
|
34
|
+
readonly datasetArtifactId: string | null;
|
|
35
|
+
readonly groupMap: Readonly<Record<string, string>>;
|
|
36
|
+
readonly groupDimensions: Readonly<Record<string, JsonValue>>;
|
|
37
|
+
readonly policy: {
|
|
38
|
+
readonly allowedReviewStatuses: readonly DiagnosticAllowedReviewStatus[];
|
|
39
|
+
readonly allowedMetricFindingSeverities: readonly ("info" | "warning" | "fail")[];
|
|
40
|
+
readonly rationaleRef: string | null;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export interface DiagnosticExecutionGateReceipt {
|
|
44
|
+
readonly allowedReviewStatuses: readonly DiagnosticAllowedReviewStatus[];
|
|
45
|
+
readonly allowedMetricFindingSeverities: readonly ("info" | "warning" | "fail")[];
|
|
46
|
+
readonly rationaleRef: string | null;
|
|
47
|
+
readonly reviewGate: "passed" | "blocked";
|
|
48
|
+
readonly metricGate: "not-run" | "passed" | "blocked";
|
|
49
|
+
}
|
|
50
|
+
export interface CompletedValidatedMetricDiagnosticsRun {
|
|
51
|
+
readonly status: "completed";
|
|
52
|
+
readonly prepared: import("@actuarial-ts/core").PreparedDiagnosticData;
|
|
53
|
+
readonly review: DiagnosticReviewReceipt;
|
|
54
|
+
readonly result: DiagnosticDeepReadonly<MetricDiagnosticsResult>;
|
|
55
|
+
readonly runPresetId: string | null;
|
|
56
|
+
readonly datasetArtifactId: string | null;
|
|
57
|
+
readonly groupMap: Readonly<Record<string, string>>;
|
|
58
|
+
readonly groupDimensions: Readonly<Record<string, JsonValue>>;
|
|
59
|
+
readonly gate: DiagnosticExecutionGateReceipt & {
|
|
60
|
+
readonly reviewGate: "passed";
|
|
61
|
+
readonly metricGate: "passed";
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export type ValidatedMetricDiagnosticsOutcome = CompletedValidatedMetricDiagnosticsRun | {
|
|
65
|
+
readonly status: "blocked";
|
|
66
|
+
readonly stage: "review";
|
|
67
|
+
readonly prepared: import("@actuarial-ts/core").PreparedDiagnosticData;
|
|
68
|
+
readonly review: DiagnosticReviewReceipt;
|
|
69
|
+
readonly result: null;
|
|
70
|
+
readonly runPresetId: string | null;
|
|
71
|
+
readonly datasetArtifactId: string | null;
|
|
72
|
+
readonly groupMap: Readonly<Record<string, string>>;
|
|
73
|
+
readonly groupDimensions: Readonly<Record<string, JsonValue>>;
|
|
74
|
+
readonly gate: DiagnosticExecutionGateReceipt & {
|
|
75
|
+
readonly reviewGate: "blocked";
|
|
76
|
+
readonly metricGate: "not-run";
|
|
77
|
+
};
|
|
78
|
+
} | {
|
|
79
|
+
readonly status: "blocked";
|
|
80
|
+
readonly stage: "metric";
|
|
81
|
+
readonly prepared: import("@actuarial-ts/core").PreparedDiagnosticData;
|
|
82
|
+
readonly review: DiagnosticReviewReceipt;
|
|
83
|
+
readonly result: DiagnosticDeepReadonly<MetricDiagnosticsResult>;
|
|
84
|
+
readonly runPresetId: string | null;
|
|
85
|
+
readonly datasetArtifactId: string | null;
|
|
86
|
+
readonly groupMap: Readonly<Record<string, string>>;
|
|
87
|
+
readonly groupDimensions: Readonly<Record<string, JsonValue>>;
|
|
88
|
+
readonly gate: DiagnosticExecutionGateReceipt & {
|
|
89
|
+
readonly reviewGate: "passed";
|
|
90
|
+
readonly metricGate: "blocked";
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
export declare function validateDiagnosticRunInput(value: unknown): ValidatedDiagnosticRunInput;
|
|
94
|
+
export declare function assertValidatedDiagnosticRunInput(value: unknown): asserts value is ValidatedDiagnosticRunInput;
|
|
95
|
+
export declare function runValidatedMetricDiagnostics(input: ValidatedDiagnosticRunInput): ValidatedMetricDiagnosticsOutcome;
|
|
96
|
+
export declare function assertCompletedValidatedMetricDiagnosticsRun(value: unknown): asserts value is CompletedValidatedMetricDiagnosticsRun;
|
|
97
|
+
export {};
|
|
14
98
|
//# sourceMappingURL=diagnosticInput.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnosticInput.d.ts","sourceRoot":"","sources":["../src/diagnosticInput.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"diagnosticInput.d.ts","sourceRoot":"","sources":["../src/diagnosticInput.ts"],"names":[],"mappings":"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"}
|
package/dist/diagnosticInput.js
CHANGED
|
@@ -1,51 +1,63 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DiagnosticValidationError, compileDiagnosticDefinition, prepareDiagnosticData, runMetricDiagnostics, } from "@actuarial-ts/core";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}).strict();
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
if (!parsed.success) {
|
|
31
|
-
const details = parsed.error.issues
|
|
32
|
-
.map((issue) => `${issue.path.length > 0 ? issue.path.join(".") : "$"}: ${issue.message}`)
|
|
33
|
-
.join("; ");
|
|
34
|
-
throw new ReservingError("SHAPE", `Invalid diagnostic dataset: ${details}`);
|
|
3
|
+
import { reviewPreparedDiagnosticData } from "./diagnosticPreparedReview.js";
|
|
4
|
+
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();
|
|
5
|
+
const measuresSchema = z.record(z.union([z.number(), z.null()]));
|
|
6
|
+
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 };
|
|
7
|
+
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()]);
|
|
8
|
+
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();
|
|
9
|
+
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();
|
|
10
|
+
const cutoffSchema = z.object({ sourceGroup: z.string().min(1), originThrough: z.string().min(1).nullable(), valuationThrough: z.string().min(1).nullable() }).strict();
|
|
11
|
+
const expectedSchema = z.object({ sourceGroup: z.string().min(1), origin: z.string().min(1), valuation: z.string().min(1), source: sourceSchema.optional() }).strict();
|
|
12
|
+
const jsonSchema = z.lazy(() => z.union([z.null(), z.boolean(), z.number().finite(), z.string(), z.array(jsonSchema), z.record(jsonSchema)]));
|
|
13
|
+
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();
|
|
14
|
+
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();
|
|
15
|
+
const authentic = new WeakSet();
|
|
16
|
+
function freeze(value, seen = new WeakSet()) { if (value === null || typeof value !== "object" || seen.has(value))
|
|
17
|
+
return value; seen.add(value); for (const child of Object.values(value))
|
|
18
|
+
freeze(child, seen); return Object.freeze(value); }
|
|
19
|
+
function issues(error) { 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"), 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 }))); }
|
|
20
|
+
export function validateDiagnosticRunInput(value) {
|
|
21
|
+
const parsed = runSchema.safeParse(value);
|
|
22
|
+
if (!parsed.success)
|
|
23
|
+
throw issues(parsed.error);
|
|
24
|
+
const definition = compileDiagnosticDefinition(parsed.data.definition);
|
|
25
|
+
const relationIssues = parsed.data.losses.flatMap((row, index) => row.rowType === definition.definition.lossRowGrain ? [] : [{ domain: "input", code: "invalid-input-relationship", path: `$.losses[${index}].rowType`, message: "Loss row type does not match definition grain" }]);
|
|
26
|
+
for (const [index, row] of (parsed.data.exposures ?? []).entries()) {
|
|
27
|
+
const measure = definition.definition.measures.find((item) => item.id === row.measureId);
|
|
28
|
+
if (measure?.exposureTiming === "valuation-specific" && row.valuation === undefined)
|
|
29
|
+
relationIssues.push({ domain: "input", code: "missing-required", path: `$.exposures[${index}].valuation`, message: "Valuation-specific exposure requires valuation" });
|
|
35
30
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
31
|
+
if (relationIssues.length)
|
|
32
|
+
throw new DiagnosticValidationError(relationIssues);
|
|
33
|
+
const review = parsed.data.policy?.allowedReviewStatuses ?? ["pass", "warning", "not-evaluated"];
|
|
34
|
+
const metric = parsed.data.policy?.allowedMetricFindingSeverities ?? ["info", "warning"];
|
|
35
|
+
const rationale = parsed.data.policy?.rationaleRef ?? null;
|
|
36
|
+
if ((review.includes("fail") || metric.includes("fail")) && rationale === null)
|
|
37
|
+
throw new DiagnosticValidationError([{ domain: "configuration", code: "missing-required", path: "$.policy.rationaleRef", message: "A rationale is required when fail outcomes are allowed" }]);
|
|
38
|
+
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 } });
|
|
39
|
+
authentic.add(result);
|
|
40
|
+
return result;
|
|
40
41
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const
|
|
49
|
-
|
|
42
|
+
export function assertValidatedDiagnosticRunInput(value) { if (value === null || typeof value !== "object" || !authentic.has(value))
|
|
43
|
+
throw new DiagnosticValidationError([{ domain: "input", code: "invalid-input-relationship", path: "$", message: "Value is not an authentic validated diagnostic run input" }]); }
|
|
44
|
+
const completed = new WeakSet();
|
|
45
|
+
export function runValidatedMetricDiagnostics(input) {
|
|
46
|
+
assertValidatedDiagnosticRunInput(input);
|
|
47
|
+
const prepared = prepareDiagnosticData({ definition: input.definition, losses: input.losses, exposures: input.exposures, filter: input.filter ?? undefined, completePeriodCutoffs: input.completePeriodCutoffs, expectedCells: input.expectedCells ?? undefined });
|
|
48
|
+
const review = reviewPreparedDiagnosticData({ prepared, evidence: input.reviewEvidence });
|
|
49
|
+
const disallowedReview = review.report.checks.some((check) => !input.policy.allowedReviewStatuses.includes(check.status));
|
|
50
|
+
const base = { prepared, review, runPresetId: input.runPresetId, datasetArtifactId: input.datasetArtifactId, groupMap: input.groupMap, groupDimensions: input.groupDimensions };
|
|
51
|
+
if (disallowedReview)
|
|
52
|
+
return freeze({ ...base, status: "blocked", stage: "review", result: null, gate: { ...input.policy, reviewGate: "blocked", metricGate: "not-run" } });
|
|
53
|
+
const result = runMetricDiagnostics({ prepared, groupMap: input.groupMap, groupDimensions: input.groupDimensions });
|
|
54
|
+
const disallowedMetric = result.findings.some((finding) => finding.category !== "structural" && !input.policy.allowedMetricFindingSeverities.includes(finding.severity));
|
|
55
|
+
if (disallowedMetric)
|
|
56
|
+
return freeze({ ...base, status: "blocked", stage: "metric", result, gate: { ...input.policy, reviewGate: "passed", metricGate: "blocked" } });
|
|
57
|
+
const outcome = freeze({ ...base, status: "completed", result, gate: { ...input.policy, reviewGate: "passed", metricGate: "passed" } });
|
|
58
|
+
completed.add(outcome);
|
|
59
|
+
return outcome;
|
|
50
60
|
}
|
|
61
|
+
export function assertCompletedValidatedMetricDiagnosticsRun(value) { if (value === null || typeof value !== "object" || !completed.has(value))
|
|
62
|
+
throw new DiagnosticValidationError([{ domain: "input", code: "invalid-input-relationship", path: "$", message: "Value is not an authentic completed diagnostic run" }]); }
|
|
51
63
|
//# sourceMappingURL=diagnosticInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnosticInput.js","sourceRoot":"","sources":["../src/diagnosticInput.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"diagnosticInput.js","sourceRoot":"","sources":["../src/diagnosticInput.ts"],"names":[],"mappings":"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"}
|