@actuarial-ts/interchange 0.7.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -7
- package/dist/convert/customizationAnalysis.d.ts +27 -0
- package/dist/convert/customizationAnalysis.d.ts.map +1 -0
- package/dist/convert/customizationAnalysis.js +79 -0
- package/dist/convert/customizationAnalysis.js.map +1 -0
- package/dist/envelope.d.ts +3 -3
- package/dist/envelope.d.ts.map +1 -1
- package/dist/envelope.js +4 -2
- package/dist/envelope.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/parse.d.ts +2 -1
- package/dist/parse.d.ts.map +1 -1
- package/dist/parse.js.map +1 -1
- package/dist/schemas/customizationAnalysis.d.ts +37 -0
- package/dist/schemas/customizationAnalysis.d.ts.map +1 -0
- package/dist/schemas/customizationAnalysis.js +38 -0
- package/dist/schemas/customizationAnalysis.js.map +1 -0
- package/dist/schemas/manifest.d.ts.map +1 -1
- package/dist/schemas/manifest.js +6 -0
- package/dist/schemas/manifest.js.map +1 -1
- package/package.json +4 -3
- package/src/convert/customizationAnalysis.ts +129 -0
- package/src/envelope.ts +4 -2
- package/src/index.ts +2 -0
- package/src/parse.ts +3 -1
- package/src/schemas/customizationAnalysis.ts +90 -0
- package/src/schemas/manifest.ts +6 -0
package/README.md
CHANGED
|
@@ -3,14 +3,19 @@
|
|
|
3
3
|
Typed TypeScript implementation of actuarial-interchange: portable, integrity-stamped documents shared by actuarial-ts, chainladder-python, and R ChainLadder.
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
|
-
npm install @actuarial-ts/interchange@0.
|
|
6
|
+
npm install @actuarial-ts/interchange@0.8.0 @actuarial-ts/core@0.8.0
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
-
Node 20+, ESM.
|
|
9
|
+
Node 20+, ESM. Current writers use interchange wire `1.2.0` and readers accept compatible major-version-1 documents. SDK package versions and interchange wire versions are independent.
|
|
10
|
+
|
|
11
|
+
Wire 1.2 adds the portable `customization-analysis` document. TypeScript can
|
|
12
|
+
execute and verify its current contracts; Python and R adapter 0.3 parse and
|
|
13
|
+
preserve it without claiming execution. See the [0.8 adoption guide](https://github.com/yerromnitsuj/actng/blob/v0.8.0/docs/migrations/0.8-reusable-customization.md)
|
|
14
|
+
and [customization reference](https://github.com/yerromnitsuj/actng/blob/v0.8.0/docs/reference/reusable-customization.md).
|
|
10
15
|
|
|
11
16
|
## Document kinds
|
|
12
17
|
|
|
13
|
-
`triangle`, `selection`, `method-result`, `stochastic-result`, `study`, `bundle`, `crosscheck-report`,
|
|
18
|
+
`triangle`, `selection`, `method-result`, `stochastic-result`, `study`, `bundle`, `crosscheck-report`, `diagnostic-definition`, and `customization-analysis` share an envelope with writer version, generator, caller-supplied timestamp, semantic-body FNV-1a/JCS integrity tag, and optional governance/extensions.
|
|
14
19
|
|
|
15
20
|
```ts
|
|
16
21
|
import {
|
|
@@ -28,7 +33,7 @@ const executable = docToDiagnosticDefinition(document);
|
|
|
28
33
|
|
|
29
34
|
Generic parsing validates known fields, preserves same-major unknown envelope and nested fields, verifies integrity, and recursively verifies documents embedded in studies/bundles. Executable diagnostic conversion is intentionally stricter: it requires the current normalized vocabulary, recompiles the complete definition, and verifies formula, calculation, and definition identities. A future field can therefore survive a storage hop without being silently executed.
|
|
30
35
|
|
|
31
|
-
Bundles may carry typed diagnostic definition documents under `interchange.diagnosticDefinitions`; each nested document has its own tag and is also covered by the outer `{ bundle, interchange }` tag. JSON Schemas live in `schema/interchange/1.
|
|
36
|
+
Bundles may carry typed diagnostic definition documents under `interchange.diagnosticDefinitions`; each nested document has its own tag and is also covered by the outer `{ bundle, interchange }` tag. Current JSON Schemas live in `schema/interchange/1.2`; the `1.0` and `1.1` directories remain historical.
|
|
32
37
|
|
|
33
38
|
## Interoperability
|
|
34
39
|
|
|
@@ -40,14 +45,14 @@ passed to `parseDocument`, and is not the three-shore aggregate-cell replay
|
|
|
40
45
|
contract described above. Use compliance's dedicated stream reader with its
|
|
41
46
|
required resource policy. A stream's engine-version identities also require
|
|
42
47
|
retaining the producing SDK versions; same interchange or stream wire versions
|
|
43
|
-
do not promise cross-SDK-version verification. See the [compact adoption guide](https://github.com/yerromnitsuj/actng/blob/v0.
|
|
44
|
-
and [replay reference](https://github.com/yerromnitsuj/actng/blob/v0.
|
|
48
|
+
do not promise cross-SDK-version verification. See the [compact adoption guide](https://github.com/yerromnitsuj/actng/blob/v0.8.0/docs/migrations/0.7-compact-diagnostics.md)
|
|
49
|
+
and [replay reference](https://github.com/yerromnitsuj/actng/blob/v0.8.0/docs/reference/diagnostic-replay-stream.md).
|
|
45
50
|
|
|
46
51
|
`crosscheck` compares two method-result documents under explicit convention profiles. Outcomes are `agree`, `disagree`, `not-comparable`, or `verified-by-value`; the referee never hides convention differences or treats mutual agreement as proof of correctness.
|
|
47
52
|
|
|
48
53
|
Integrity tags detect accidental drift and support deterministic linking. FNV-1a is unkeyed and is not tamper resistance, authentication, or a security boundary.
|
|
49
54
|
|
|
50
|
-
The normative format is [actuarial-interchange rev 2.
|
|
55
|
+
The normative format is [actuarial-interchange rev 2.5](https://github.com/yerromnitsuj/actng/blob/v0.8.0/docs/spec/actuarial-interchange.md). See the generated [diagnostic formula catalog](https://github.com/yerromnitsuj/actng/blob/v0.8.0/docs/reference/diagnostic-formulas.md) and [0.6 migration guide](https://github.com/yerromnitsuj/actng/blob/v0.8.0/docs/migrations/0.6-generalized-diagnostics.md).
|
|
51
56
|
|
|
52
57
|
## License
|
|
53
58
|
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type AnalysisDefinition, type AnalysisRecipe, type AnalysisResult, type AnalysisScenario, type CustomizationExposureObservation, type ExposureAllocationTarget, type ExposureRevisionSelection, type HistoricalDatasetInput } from "@actuarial-ts/core";
|
|
2
|
+
import { type GeneratorStamp } from "../envelope.js";
|
|
3
|
+
import { type ParseDocumentOptions } from "../parse.js";
|
|
4
|
+
import { type CustomizationAnalysisDoc } from "../schemas/customizationAnalysis.js";
|
|
5
|
+
export interface CustomizationAnalysisDocumentInput {
|
|
6
|
+
readonly history: HistoricalDatasetInput;
|
|
7
|
+
readonly analysisDefinition: AnalysisDefinition;
|
|
8
|
+
readonly recipe: AnalysisRecipe;
|
|
9
|
+
readonly result: AnalysisResult;
|
|
10
|
+
readonly scenario?: AnalysisScenario;
|
|
11
|
+
readonly exposureObservations?: readonly CustomizationExposureObservation[];
|
|
12
|
+
readonly exposureTargets?: readonly ExposureAllocationTarget[];
|
|
13
|
+
readonly exposureRevisionSelection?: ExposureRevisionSelection;
|
|
14
|
+
readonly evaluationDate?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface CustomizationAnalysisDocumentOptions {
|
|
17
|
+
readonly createdAt: string;
|
|
18
|
+
readonly generator?: GeneratorStamp;
|
|
19
|
+
readonly extensions?: Readonly<Record<string, unknown>>;
|
|
20
|
+
}
|
|
21
|
+
/** Creates a portable, integrity-stamped document after exact TypeScript execution verification. */
|
|
22
|
+
export declare function customizationAnalysisToDoc(input: CustomizationAnalysisDocumentInput, options: CustomizationAnalysisDocumentOptions): CustomizationAnalysisDoc;
|
|
23
|
+
/** Parses/preserves the portable document and rechecks identities and TypeScript execution. */
|
|
24
|
+
export declare function docToCustomizationAnalysis(value: unknown, options?: ParseDocumentOptions): CustomizationAnalysisDocumentInput & {
|
|
25
|
+
readonly warnings: readonly string[];
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=customizationAnalysis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customizationAnalysis.d.ts","sourceRoot":"","sources":["../../src/convert/customizationAnalysis.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,gCAAgC,EACrC,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC5B,MAAM,oBAAoB,CAAC;AAW5B,OAAO,EAA+D,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAElH,OAAO,EAAiB,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,qCAAqC,CAAC;AAM7C,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;IACzC,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,gCAAgC,EAAE,CAAC;IAC5E,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAC/D,QAAQ,CAAC,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IAC/D,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACzD;AAkBD,oGAAoG;AACpG,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,kCAAkC,EACzC,OAAO,EAAE,oCAAoC,GAC5C,wBAAwB,CA8B1B;AAED,+FAA+F;AAC/F,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,kCAAkC,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAmBxK"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { applyAnalysisScenario, canonicalJson, fnv1a64, runAnalysisRecipe, ReservingError, } from "@actuarial-ts/core";
|
|
2
|
+
import { parseAnalysisDefinition, parseAnalysisRecipe, parseAnalysisResult, parseAnalysisScenario, parseCustomizationExposureObservations, parseExposureAllocationTargets, parseExposureRevisionSelection, parseHistoricalDatasetInput, } from "@actuarial-ts/data";
|
|
3
|
+
import { DEFAULT_GENERATOR, INTERCHANGE_SPEC_VERSION, stampIntegrity } from "../envelope.js";
|
|
4
|
+
import { snapshotInterchangeJson } from "../json.js";
|
|
5
|
+
import { parseDocument } from "../parse.js";
|
|
6
|
+
import { CUSTOMIZATION_INTERCHANGE_CONTRACT_VERSION, customizationAnalysisDocSchema, } from "../schemas/customizationAnalysis.js";
|
|
7
|
+
function identity(value) {
|
|
8
|
+
return `fnv1a64-jcs-v1:${fnv1a64(canonicalJson(value))}`;
|
|
9
|
+
}
|
|
10
|
+
function validated(input) {
|
|
11
|
+
const history = parseHistoricalDatasetInput(input.history);
|
|
12
|
+
const analysisDefinition = parseAnalysisDefinition(input.analysisDefinition);
|
|
13
|
+
const recipe = parseAnalysisRecipe(input.recipe);
|
|
14
|
+
const result = parseAnalysisResult(input.result);
|
|
15
|
+
const scenario = input.scenario === undefined ? undefined : parseAnalysisScenario(input.scenario);
|
|
16
|
+
const exposureObservations = parseCustomizationExposureObservations(input.exposureObservations ?? []);
|
|
17
|
+
const exposureTargets = parseExposureAllocationTargets(input.exposureTargets ?? []);
|
|
18
|
+
const exposureRevisionSelection = input.exposureRevisionSelection === undefined ? undefined : parseExposureRevisionSelection(input.exposureRevisionSelection);
|
|
19
|
+
const effective = scenario === undefined ? analysisDefinition : applyAnalysisScenario(analysisDefinition, scenario);
|
|
20
|
+
const rerun = runAnalysisRecipe({ history, definition: effective, recipe, exposureObservations, exposureTargets, ...(exposureRevisionSelection === undefined ? {} : { exposureRevisionSelection }), ...(input.evaluationDate === undefined ? {} : { evaluationDate: input.evaluationDate }) });
|
|
21
|
+
if (canonicalJson(rerun) !== canonicalJson(result))
|
|
22
|
+
throw new ReservingError("BAD_INTERCHANGE", "Customization analysis result differs from an exact TypeScript rerun");
|
|
23
|
+
return { history, analysisDefinition, recipe, result, scenario, exposureObservations, exposureTargets, exposureRevisionSelection };
|
|
24
|
+
}
|
|
25
|
+
/** Creates a portable, integrity-stamped document after exact TypeScript execution verification. */
|
|
26
|
+
export function customizationAnalysisToDoc(input, options) {
|
|
27
|
+
const value = validated(input);
|
|
28
|
+
const exposureIdentity = { observations: value.exposureObservations, targets: value.exposureTargets, revisionSelection: value.exposureRevisionSelection ?? null };
|
|
29
|
+
const candidate = stampIntegrity({
|
|
30
|
+
interchangeVersion: INTERCHANGE_SPEC_VERSION,
|
|
31
|
+
kind: "customization-analysis",
|
|
32
|
+
generator: options.generator ?? DEFAULT_GENERATOR,
|
|
33
|
+
createdAt: options.createdAt,
|
|
34
|
+
...(options.extensions === undefined ? {} : { extensions: options.extensions }),
|
|
35
|
+
customizationAnalysis: {
|
|
36
|
+
contractVersion: CUSTOMIZATION_INTERCHANGE_CONTRACT_VERSION,
|
|
37
|
+
history: value.history,
|
|
38
|
+
analysisDefinition: value.analysisDefinition,
|
|
39
|
+
recipe: value.recipe,
|
|
40
|
+
result: value.result,
|
|
41
|
+
...(value.scenario === undefined ? {} : { scenario: value.scenario }),
|
|
42
|
+
exposureObservations: value.exposureObservations,
|
|
43
|
+
exposureTargets: value.exposureTargets,
|
|
44
|
+
...(value.exposureRevisionSelection === undefined ? {} : { exposureRevisionSelection: value.exposureRevisionSelection }),
|
|
45
|
+
...(input.evaluationDate === undefined ? {} : { evaluationDate: input.evaluationDate }),
|
|
46
|
+
identities: {
|
|
47
|
+
history: identity(value.history), analysisDefinition: identity(value.analysisDefinition), recipe: identity(value.recipe), result: identity(value.result), exposure: identity(exposureIdentity),
|
|
48
|
+
...(value.scenario === undefined ? {} : { scenario: identity(value.scenario) }),
|
|
49
|
+
},
|
|
50
|
+
executionSupport: { typescript: "execute-supported-subset", python: "parse-preserve-only", r: "parse-preserve-only" },
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
const parsed = customizationAnalysisDocSchema.safeParse(candidate);
|
|
54
|
+
if (!parsed.success)
|
|
55
|
+
throw new ReservingError("BAD_INTERCHANGE", `Invalid customization-analysis document: ${parsed.error.issues[0]?.message ?? "schema validation failed"}`);
|
|
56
|
+
return Object.freeze(snapshotInterchangeJson(candidate));
|
|
57
|
+
}
|
|
58
|
+
/** Parses/preserves the portable document and rechecks identities and TypeScript execution. */
|
|
59
|
+
export function docToCustomizationAnalysis(value, options) {
|
|
60
|
+
const parsed = parseDocument(value, options);
|
|
61
|
+
if (parsed.doc.kind !== "customization-analysis")
|
|
62
|
+
throw new ReservingError("BAD_INTERCHANGE", `Expected kind \"customization-analysis\"; got kind \"${parsed.doc.kind}\"`);
|
|
63
|
+
const body = parsed.doc.customizationAnalysis;
|
|
64
|
+
const checked = validated({
|
|
65
|
+
history: body.history, analysisDefinition: body.analysisDefinition, recipe: body.recipe, result: body.result,
|
|
66
|
+
...(body.scenario === undefined ? {} : { scenario: body.scenario }), exposureObservations: body.exposureObservations,
|
|
67
|
+
exposureTargets: body.exposureTargets, ...(body.exposureRevisionSelection === undefined ? {} : { exposureRevisionSelection: body.exposureRevisionSelection }),
|
|
68
|
+
...(body.evaluationDate === undefined ? {} : { evaluationDate: body.evaluationDate }),
|
|
69
|
+
});
|
|
70
|
+
const exposureIdentity = { observations: checked.exposureObservations, targets: checked.exposureTargets, revisionSelection: checked.exposureRevisionSelection ?? null };
|
|
71
|
+
const expected = {
|
|
72
|
+
history: identity(checked.history), analysisDefinition: identity(checked.analysisDefinition), recipe: identity(checked.recipe), result: identity(checked.result), exposure: identity(exposureIdentity),
|
|
73
|
+
...(checked.scenario === undefined ? {} : { scenario: identity(checked.scenario) }),
|
|
74
|
+
};
|
|
75
|
+
if (canonicalJson(body.identities) !== canonicalJson(expected))
|
|
76
|
+
throw new ReservingError("BAD_INTERCHANGE", "Customization analysis contract identities do not match their canonical content");
|
|
77
|
+
return { ...checked, ...(body.evaluationDate === undefined ? {} : { evaluationDate: body.evaluationDate }), warnings: parsed.warnings };
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=customizationAnalysis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customizationAnalysis.js","sourceRoot":"","sources":["../../src/convert/customizationAnalysis.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,OAAO,EACP,iBAAiB,EACjB,cAAc,GASf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,sCAAsC,EACtC,8BAA8B,EAC9B,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,cAAc,EAAuB,MAAM,gBAAgB,CAAC;AAClH,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EACL,0CAA0C,EAC1C,8BAA8B,GAE/B,MAAM,qCAAqC,CAAC;AAE7C,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,kBAAkB,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AAC3D,CAAC;AAoBD,SAAS,SAAS,CAAC,KAAyC;IAC1D,MAAM,OAAO,GAAG,2BAA2B,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClG,MAAM,oBAAoB,GAAG,sCAAsC,CAAC,KAAK,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;IACtG,MAAM,eAAe,GAAG,8BAA8B,CAAC,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;IACpF,MAAM,yBAAyB,GAAG,KAAK,CAAC,yBAAyB,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,8BAA8B,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC9J,MAAM,SAAS,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,qBAAqB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IACpH,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,oBAAoB,EAAE,eAAe,EAAE,GAAG,CAAC,yBAAyB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,yBAAyB,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/R,IAAI,aAAa,CAAC,KAAK,CAAC,KAAK,aAAa,CAAC,MAAM,CAAC;QAChD,MAAM,IAAI,cAAc,CAAC,iBAAiB,EAAE,sEAAsE,CAAC,CAAC;IACtH,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,EAAE,eAAe,EAAE,yBAAyB,EAAE,CAAC;AACrI,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,0BAA0B,CACxC,KAAyC,EACzC,OAA6C;IAE7C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,gBAAgB,GAAG,EAAE,YAAY,EAAE,KAAK,CAAC,oBAAoB,EAAE,OAAO,EAAE,KAAK,CAAC,eAAe,EAAE,iBAAiB,EAAE,KAAK,CAAC,yBAAyB,IAAI,IAAI,EAAE,CAAC;IAClK,MAAM,SAAS,GAAG,cAAc,CAA2B;QACzD,kBAAkB,EAAE,wBAAwB;QAC5C,IAAI,EAAE,wBAAwB;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,iBAAiB;QACjD,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;QAC/E,qBAAqB,EAAE;YACrB,eAAe,EAAE,0CAA0C;YAC3D,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;YAC5C,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrE,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;YAChD,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,GAAG,CAAC,KAAK,CAAC,yBAAyB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,yBAAyB,EAAE,KAAK,CAAC,yBAAyB,EAAE,CAAC;YACxH,GAAG,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;YACvF,UAAU,EAAE;gBACV,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,kBAAkB,EAAE,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC;gBAC9L,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;aAChF;YACD,gBAAgB,EAAE,EAAE,UAAU,EAAE,0BAA0B,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,EAAE,qBAAqB,EAAE;SACtH;KACF,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,8BAA8B,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACnE,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,IAAI,cAAc,CAAC,iBAAiB,EAAE,4CAA4C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,0BAA0B,EAAE,CAAC,CAAC;IAC9K,OAAO,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,0BAA0B,CAAC,KAAc,EAAE,OAA8B;IACvF,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,wBAAwB;QAC9C,MAAM,IAAI,cAAc,CAAC,iBAAiB,EAAE,wDAAwD,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;IAC3H,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC;IAC9C,MAAM,OAAO,GAAG,SAAS,CAAC;QACxB,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM;QAC5G,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;QACpH,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC,yBAAyB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,yBAAyB,EAAE,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC7J,GAAG,CAAC,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;KACtF,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,oBAAoB,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,EAAE,iBAAiB,EAAE,OAAO,CAAC,yBAAyB,IAAI,IAAI,EAAE,CAAC;IACxK,MAAM,QAAQ,GAAG;QACf,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,kBAAkB,EAAE,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC;QACtM,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;KACpF,CAAC;IACF,IAAI,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,aAAa,CAAC,QAAQ,CAAC;QAC5D,MAAM,IAAI,cAAc,CAAC,iBAAiB,EAAE,iFAAiF,CAAC,CAAC;IACjI,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC1I,CAAC"}
|
package/dist/envelope.d.ts
CHANGED
|
@@ -25,21 +25,21 @@ import { z } from "zod";
|
|
|
25
25
|
* a clock.
|
|
26
26
|
*/
|
|
27
27
|
/** The interchange spec version this package writes. */
|
|
28
|
-
export declare const INTERCHANGE_SPEC_VERSION = "1.
|
|
28
|
+
export declare const INTERCHANGE_SPEC_VERSION = "1.2.0";
|
|
29
29
|
/** The spec major this package accepts (spec 3.5: readers accept same-major). */
|
|
30
30
|
export declare const INTERCHANGE_SPEC_MAJOR = 1;
|
|
31
31
|
/**
|
|
32
32
|
* This package's version, stamped into `generator` by default. A sync test
|
|
33
33
|
* asserts it matches package.json so it cannot silently drift.
|
|
34
34
|
*/
|
|
35
|
-
export declare const INTERCHANGE_PACKAGE_VERSION = "0.
|
|
35
|
+
export declare const INTERCHANGE_PACKAGE_VERSION = "0.8.0";
|
|
36
36
|
export interface GeneratorStamp {
|
|
37
37
|
name: string;
|
|
38
38
|
version: string;
|
|
39
39
|
}
|
|
40
40
|
/** Default `generator` stamp for documents authored by this package. */
|
|
41
41
|
export declare const DEFAULT_GENERATOR: Readonly<GeneratorStamp>;
|
|
42
|
-
export declare const DOCUMENT_KINDS: readonly ["triangle", "selection", "method-result", "stochastic-result", "study", "bundle", "crosscheck-report", "diagnostic-definition"];
|
|
42
|
+
export declare const DOCUMENT_KINDS: readonly ["triangle", "selection", "method-result", "stochastic-result", "study", "bundle", "crosscheck-report", "diagnostic-definition", "customization-analysis"];
|
|
43
43
|
export type DocumentKind = (typeof DOCUMENT_KINDS)[number];
|
|
44
44
|
/** A 16-hex-char fnv1a64 tag. */
|
|
45
45
|
export declare const integritySchema: z.ZodString;
|
package/dist/envelope.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../src/envelope.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,wDAAwD;AACxD,eAAO,MAAM,wBAAwB,UAAU,CAAC;AAEhD,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;GAGG;AACH,eAAO,MAAM,2BAA2B,UAAU,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wEAAwE;AACxE,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,cAAc,CAGrD,CAAC;AAEH,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../src/envelope.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,wDAAwD;AACxD,eAAO,MAAM,wBAAwB,UAAU,CAAC;AAEhD,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;GAGG;AACH,eAAO,MAAM,2BAA2B,UAAU,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wEAAwE;AACxE,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,cAAc,CAGrD,CAAC;AAEH,eAAO,MAAM,cAAc,qKAUjB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAmB3D,iCAAiC;AACjC,eAAO,MAAM,eAAe,aAAqC,CAAC;AAElE,eAAO,MAAM,eAAe;;;;;;;;;gCAEZ,CAAC;AAEjB;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,YAAY,EAAE,IAAI,EAAE,CAAC;;;;;;;;;;;;;;;;EAe5D;AAED,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAoBzD;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAE1D;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,CAAC,SAAS,YAAY,EACnD,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,GACvC,CAAC,CAEH;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,OAAO,CAAC;IACZ,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,cAAc,CAKjE;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,aAAa,CAmB7D"}
|
package/dist/envelope.js
CHANGED
|
@@ -27,14 +27,14 @@ import { recordSchema } from "./schemas/record.js";
|
|
|
27
27
|
* a clock.
|
|
28
28
|
*/
|
|
29
29
|
/** The interchange spec version this package writes. */
|
|
30
|
-
export const INTERCHANGE_SPEC_VERSION = "1.
|
|
30
|
+
export const INTERCHANGE_SPEC_VERSION = "1.2.0";
|
|
31
31
|
/** The spec major this package accepts (spec 3.5: readers accept same-major). */
|
|
32
32
|
export const INTERCHANGE_SPEC_MAJOR = 1;
|
|
33
33
|
/**
|
|
34
34
|
* This package's version, stamped into `generator` by default. A sync test
|
|
35
35
|
* asserts it matches package.json so it cannot silently drift.
|
|
36
36
|
*/
|
|
37
|
-
export const INTERCHANGE_PACKAGE_VERSION = "0.
|
|
37
|
+
export const INTERCHANGE_PACKAGE_VERSION = "0.8.0";
|
|
38
38
|
/** Default `generator` stamp for documents authored by this package. */
|
|
39
39
|
export const DEFAULT_GENERATOR = Object.freeze({
|
|
40
40
|
name: "@actuarial-ts/interchange",
|
|
@@ -49,6 +49,7 @@ export const DOCUMENT_KINDS = [
|
|
|
49
49
|
"bundle",
|
|
50
50
|
"crosscheck-report",
|
|
51
51
|
"diagnostic-definition",
|
|
52
|
+
"customization-analysis",
|
|
52
53
|
];
|
|
53
54
|
/**
|
|
54
55
|
* kind → the top-level key(s) holding the semantic body. Single-key kinds
|
|
@@ -64,6 +65,7 @@ const SEMANTIC_BODY_KEYS = {
|
|
|
64
65
|
bundle: ["bundle", "interchange"],
|
|
65
66
|
"crosscheck-report": ["report"],
|
|
66
67
|
"diagnostic-definition": ["diagnosticDefinition"],
|
|
68
|
+
"customization-analysis": ["customizationAnalysis"],
|
|
67
69
|
};
|
|
68
70
|
/** A 16-hex-char fnv1a64 tag. */
|
|
69
71
|
export const integritySchema = z.string().regex(/^[0-9a-f]{16}$/);
|
package/dist/envelope.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../src/envelope.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,aAAa,EACb,OAAO,EACP,aAAa,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,wDAAwD;AACxD,MAAM,CAAC,MAAM,wBAAwB,GAAG,OAAO,CAAC;AAEhD,iFAAiF;AACjF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAExC;;;GAGG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,OAAO,CAAC;AAOnD,wEAAwE;AACxE,MAAM,CAAC,MAAM,iBAAiB,GAA6B,MAAM,CAAC,MAAM,CAAC;IACvE,IAAI,EAAE,2BAA2B;IACjC,OAAO,EAAE,2BAA2B;CACrC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,UAAU;IACV,WAAW;IACX,eAAe;IACf,mBAAmB;IACnB,OAAO;IACP,QAAQ;IACR,mBAAmB;IACnB,uBAAuB;
|
|
1
|
+
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../src/envelope.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,10 +8,12 @@ export * from "./schemas/bundle.js";
|
|
|
8
8
|
export * from "./schemas/crosscheck.js";
|
|
9
9
|
export * from "./schemas/diagnosticDefinition.js";
|
|
10
10
|
export * from "./schemas/manifest.js";
|
|
11
|
+
export * from "./schemas/customizationAnalysis.js";
|
|
11
12
|
export * from "./convert/triangle.js";
|
|
12
13
|
export * from "./convert/selection.js";
|
|
13
14
|
export * from "./convert/result.js";
|
|
14
15
|
export * from "./convert/diagnosticDefinition.js";
|
|
16
|
+
export * from "./convert/customizationAnalysis.js";
|
|
15
17
|
export * from "./referee/profiles.js";
|
|
16
18
|
export * from "./referee/crosscheck.js";
|
|
17
19
|
export * from "./referee/crosscheckStochastic.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,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mCAAmC,CAAC;AAClD,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mCAAmC,CAAC;AAClD,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mCAAmC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mCAAmC,CAAC;AAClD,cAAc,uBAAuB,CAAC;AACtC,cAAc,oCAAoC,CAAC;AACnD,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mCAAmC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -8,10 +8,12 @@ export * from "./schemas/bundle.js";
|
|
|
8
8
|
export * from "./schemas/crosscheck.js";
|
|
9
9
|
export * from "./schemas/diagnosticDefinition.js";
|
|
10
10
|
export * from "./schemas/manifest.js";
|
|
11
|
+
export * from "./schemas/customizationAnalysis.js";
|
|
11
12
|
export * from "./convert/triangle.js";
|
|
12
13
|
export * from "./convert/selection.js";
|
|
13
14
|
export * from "./convert/result.js";
|
|
14
15
|
export * from "./convert/diagnosticDefinition.js";
|
|
16
|
+
export * from "./convert/customizationAnalysis.js";
|
|
15
17
|
export * from "./referee/profiles.js";
|
|
16
18
|
export * from "./referee/crosscheck.js";
|
|
17
19
|
export * from "./referee/crosscheckStochastic.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mCAAmC,CAAC;AAClD,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mCAAmC,CAAC;AAClD,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mCAAmC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mCAAmC,CAAC;AAClD,cAAc,uBAAuB,CAAC;AACtC,cAAc,oCAAoC,CAAC;AACnD,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mCAAmC,CAAC"}
|
package/dist/parse.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import type { StudyDoc } from "./schemas/study.js";
|
|
|
5
5
|
import type { BundleDoc } from "./schemas/bundle.js";
|
|
6
6
|
import type { CrosscheckReportDoc } from "./schemas/crosscheck.js";
|
|
7
7
|
import type { DiagnosticDefinitionDoc } from "./schemas/diagnosticDefinition.js";
|
|
8
|
+
import type { CustomizationAnalysisDoc } from "./schemas/customizationAnalysis.js";
|
|
8
9
|
/**
|
|
9
10
|
* `parseDocument` (spec 4.1): version-checked, schema-validated,
|
|
10
11
|
* integrity-verified, warning-channeled entry point for any interchange
|
|
@@ -31,7 +32,7 @@ import type { DiagnosticDefinitionDoc } from "./schemas/diagnosticDefinition.js"
|
|
|
31
32
|
* that computation support is limited — a reader capability note, not a
|
|
32
33
|
* format error.
|
|
33
34
|
*/
|
|
34
|
-
export type InterchangeDocument = TriangleDoc | SelectionDoc | MethodResultDoc | StochasticResultDoc | StudyDoc | BundleDoc | CrosscheckReportDoc | DiagnosticDefinitionDoc;
|
|
35
|
+
export type InterchangeDocument = TriangleDoc | SelectionDoc | MethodResultDoc | StochasticResultDoc | StudyDoc | BundleDoc | CrosscheckReportDoc | DiagnosticDefinitionDoc | CustomizationAnalysisDoc;
|
|
35
36
|
export interface ParseDocumentOptions {
|
|
36
37
|
/** How to treat a failed integrity check. Default "refuse". */
|
|
37
38
|
strictness?: "warn" | "refuse";
|
package/dist/parse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAGnF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,MAAM,mBAAmB,GAC3B,WAAW,GACX,YAAY,GACZ,eAAe,GACf,mBAAmB,GACnB,QAAQ,GACR,SAAS,GACT,mBAAmB,GACnB,uBAAuB,GACvB,wBAAwB,CAAC;AAE7B,MAAM,WAAW,oBAAoB;IACnC,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,mBAAmB,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAyCD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,oBAAyB,GACjC,cAAc,CA+FhB"}
|
package/dist/parse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAEL,cAAc,EACd,aAAa,EACb,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { AnalysisDefinition, AnalysisRecipe, AnalysisResult, AnalysisScenario, CustomizationExposureObservation, ExposureAllocationTarget, ExposureRevisionSelection, HistoricalDatasetInput } from "@actuarial-ts/core";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { type GeneratorStamp } from "../envelope.js";
|
|
4
|
+
export declare const CUSTOMIZATION_INTERCHANGE_CONTRACT_VERSION: "actuarial-customization-interchange/1";
|
|
5
|
+
export interface CustomizationAnalysisBody {
|
|
6
|
+
readonly contractVersion: typeof CUSTOMIZATION_INTERCHANGE_CONTRACT_VERSION;
|
|
7
|
+
readonly history: HistoricalDatasetInput;
|
|
8
|
+
readonly analysisDefinition: AnalysisDefinition;
|
|
9
|
+
readonly recipe: AnalysisRecipe;
|
|
10
|
+
readonly result: AnalysisResult;
|
|
11
|
+
readonly scenario?: AnalysisScenario;
|
|
12
|
+
readonly exposureObservations: readonly CustomizationExposureObservation[];
|
|
13
|
+
readonly exposureTargets: readonly ExposureAllocationTarget[];
|
|
14
|
+
readonly exposureRevisionSelection?: ExposureRevisionSelection;
|
|
15
|
+
readonly evaluationDate?: string;
|
|
16
|
+
readonly identities: Readonly<Record<"history" | "analysisDefinition" | "recipe" | "result" | "exposure", string>> & {
|
|
17
|
+
readonly scenario?: string;
|
|
18
|
+
};
|
|
19
|
+
readonly executionSupport: {
|
|
20
|
+
readonly typescript: "execute-supported-subset";
|
|
21
|
+
readonly python: "parse-preserve-only";
|
|
22
|
+
readonly r: "parse-preserve-only";
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export interface CustomizationAnalysisDoc {
|
|
26
|
+
readonly interchangeVersion: string;
|
|
27
|
+
readonly kind: "customization-analysis";
|
|
28
|
+
readonly generator: GeneratorStamp & Record<string, unknown>;
|
|
29
|
+
readonly createdAt: string;
|
|
30
|
+
readonly extensions?: Record<string, unknown>;
|
|
31
|
+
readonly integrity: string;
|
|
32
|
+
readonly customizationAnalysis: CustomizationAnalysisBody;
|
|
33
|
+
readonly [key: string]: unknown;
|
|
34
|
+
}
|
|
35
|
+
export declare const customizationAnalysisBodySchema: z.ZodType<CustomizationAnalysisBody>;
|
|
36
|
+
export declare const customizationAnalysisDocSchema: z.ZodType<CustomizationAnalysisDoc>;
|
|
37
|
+
//# sourceMappingURL=customizationAnalysis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customizationAnalysis.d.ts","sourceRoot":"","sources":["../../src/schemas/customizationAnalysis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,gCAAgC,EAChC,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAW5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGpE,eAAO,MAAM,0CAA0C,EAAG,uCAAgD,CAAC;AAG3G,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,eAAe,EAAE,OAAO,0CAA0C,CAAC;IAC5E,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;IACzC,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,oBAAoB,EAAE,SAAS,gCAAgC,EAAE,CAAC;IAC3E,QAAQ,CAAC,eAAe,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAC9D,QAAQ,CAAC,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IAC/D,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,GAAG,oBAAoB,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC,GAAG;QAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpJ,QAAQ,CAAC,gBAAgB,EAAE;QACzB,QAAQ,CAAC,UAAU,EAAE,0BAA0B,CAAC;QAChD,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;QACvC,QAAQ,CAAC,CAAC,EAAE,qBAAqB,CAAC;KACnC,CAAC;CACH;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;IAC1D,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAWD,eAAO,MAAM,+BAA+B,EAAE,CAAC,CAAC,OAAO,CAAC,yBAAyB,CAiBjE,CAAC;AAEjB,eAAO,MAAM,8BAA8B,EAAE,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAI/D,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { analysisDefinitionSchema, analysisRecipeSchema, analysisResultSchema, analysisScenarioSchema, customizationExposureObservationSchema, exposureAllocationTargetSchema, exposureRevisionSelectionSchema, historicalDatasetInputSchema, } from "@actuarial-ts/data";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { envelopeShape } from "../envelope.js";
|
|
4
|
+
import { recordSchema } from "./record.js";
|
|
5
|
+
export const CUSTOMIZATION_INTERCHANGE_CONTRACT_VERSION = "actuarial-customization-interchange/1";
|
|
6
|
+
const identity = z.string().regex(/^fnv1a64-jcs-v1:[0-9a-f]{16}$/);
|
|
7
|
+
const identities = z.object({
|
|
8
|
+
history: identity,
|
|
9
|
+
analysisDefinition: identity,
|
|
10
|
+
recipe: identity,
|
|
11
|
+
result: identity,
|
|
12
|
+
exposure: identity,
|
|
13
|
+
scenario: identity.optional(),
|
|
14
|
+
}).passthrough();
|
|
15
|
+
export const customizationAnalysisBodySchema = z.object({
|
|
16
|
+
contractVersion: z.literal(CUSTOMIZATION_INTERCHANGE_CONTRACT_VERSION),
|
|
17
|
+
history: historicalDatasetInputSchema,
|
|
18
|
+
analysisDefinition: analysisDefinitionSchema,
|
|
19
|
+
recipe: analysisRecipeSchema,
|
|
20
|
+
result: analysisResultSchema,
|
|
21
|
+
scenario: analysisScenarioSchema.optional(),
|
|
22
|
+
exposureObservations: z.array(customizationExposureObservationSchema),
|
|
23
|
+
exposureTargets: z.array(exposureAllocationTargetSchema),
|
|
24
|
+
exposureRevisionSelection: exposureRevisionSelectionSchema.optional(),
|
|
25
|
+
evaluationDate: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
26
|
+
identities,
|
|
27
|
+
executionSupport: z.object({
|
|
28
|
+
typescript: z.literal("execute-supported-subset"),
|
|
29
|
+
python: z.literal("parse-preserve-only"),
|
|
30
|
+
r: z.literal("parse-preserve-only"),
|
|
31
|
+
}).passthrough(),
|
|
32
|
+
}).passthrough();
|
|
33
|
+
export const customizationAnalysisDocSchema = z.object({
|
|
34
|
+
...envelopeShape("customization-analysis"),
|
|
35
|
+
customizationAnalysis: customizationAnalysisBodySchema,
|
|
36
|
+
governance: recordSchema(z.unknown()).optional(),
|
|
37
|
+
}).passthrough();
|
|
38
|
+
//# sourceMappingURL=customizationAnalysis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customizationAnalysis.js","sourceRoot":"","sources":["../../src/schemas/customizationAnalysis.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,sCAAsC,EACtC,8BAA8B,EAC9B,+BAA+B,EAC/B,4BAA4B,GAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAuB,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,CAAC,MAAM,0CAA0C,GAAG,uCAAgD,CAAC;AAC3G,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;AAgCnE,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,OAAO,EAAE,QAAQ;IACjB,kBAAkB,EAAE,QAAQ;IAC5B,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC,WAAW,EAAE,CAAC;AAEjB,MAAM,CAAC,MAAM,+BAA+B,GAAyC,CAAC,CAAC,MAAM,CAAC;IAC5F,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,0CAA0C,CAAC;IACtE,OAAO,EAAE,4BAA4B;IACrC,kBAAkB,EAAE,wBAAwB;IAC5C,MAAM,EAAE,oBAAoB;IAC5B,MAAM,EAAE,oBAAoB;IAC5B,QAAQ,EAAE,sBAAsB,CAAC,QAAQ,EAAE;IAC3C,oBAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,sCAAsC,CAAC;IACrE,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC;IACxD,yBAAyB,EAAE,+BAA+B,CAAC,QAAQ,EAAE;IACrE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,QAAQ,EAAE;IAClE,UAAU;IACV,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC;QACzB,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC;QACjD,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC;QACxC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC;KACpC,CAAC,CAAC,WAAW,EAAE;CACjB,CAAC,CAAC,WAAW,EAAE,CAAC;AAEjB,MAAM,CAAC,MAAM,8BAA8B,GAAwC,CAAC,CAAC,MAAM,CAAC;IAC1F,GAAG,aAAa,CAAC,wBAAwB,CAAC;IAC1C,qBAAqB,EAAE,+BAA+B;IACtD,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAC,WAAW,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/schemas/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/schemas/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAUnD;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC;CACtB;AAED,eAAO,MAAM,2BAA2B,EAAE,SAAS,mBAAmB,EA0BrE,CAAC;AAEF,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAE3F;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,GACpE,aAAa,EAAE,CAMjB"}
|
package/dist/schemas/manifest.js
CHANGED
|
@@ -5,6 +5,7 @@ import { studyDocSchema } from "./study.js";
|
|
|
5
5
|
import { bundleDocSchema } from "./bundle.js";
|
|
6
6
|
import { crosscheckReportDocSchema } from "./crosscheck.js";
|
|
7
7
|
import { diagnosticDefinitionDocSchema } from "./diagnosticDefinition.js";
|
|
8
|
+
import { customizationAnalysisDocSchema } from "./customizationAnalysis.js";
|
|
8
9
|
export const INTERCHANGE_SCHEMA_MANIFEST = [
|
|
9
10
|
{ kind: "triangle", fileName: "triangle.schema.json", schema: triangleDocSchema },
|
|
10
11
|
{ kind: "selection", fileName: "selection.schema.json", schema: selectionDocSchema },
|
|
@@ -26,6 +27,11 @@ export const INTERCHANGE_SCHEMA_MANIFEST = [
|
|
|
26
27
|
fileName: "diagnostic-definition.schema.json",
|
|
27
28
|
schema: diagnosticDefinitionDocSchema,
|
|
28
29
|
},
|
|
30
|
+
{
|
|
31
|
+
kind: "customization-analysis",
|
|
32
|
+
fileName: "customization-analysis.schema.json",
|
|
33
|
+
schema: customizationAnalysisDocSchema,
|
|
34
|
+
},
|
|
29
35
|
];
|
|
30
36
|
/** Options both the emit script and the drift test must pass to the converter. */
|
|
31
37
|
export function emitOptionsFor(kind) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/schemas/manifest.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/schemas/manifest.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAyB5E,MAAM,CAAC,MAAM,2BAA2B,GAAmC;IACzE,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,EAAE,iBAAiB,EAAE;IACjF,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,EAAE,kBAAkB,EAAE;IACpF,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,2BAA2B,EAAE,MAAM,EAAE,qBAAqB,EAAE;IAC/F;QACE,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,+BAA+B;QACzC,MAAM,EAAE,yBAAyB;KAClC;IACD,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,EAAE,cAAc,EAAE;IACxE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,eAAe,EAAE;IAC3E;QACE,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,+BAA+B;QACzC,MAAM,EAAE,yBAAyB;KAClC;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,QAAQ,EAAE,mCAAmC;QAC7C,MAAM,EAAE,6BAA6B;KACtC;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,QAAQ,EAAE,oCAAoC;QAC9C,MAAM,EAAE,8BAA8B;KACvC;CACF,CAAC;AAEF,kFAAkF;AAClF,MAAM,UAAU,cAAc,CAAC,IAAkB;IAC/C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;AACrE,CAAC;AASD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAqE;IAErE,OAAO,2BAA2B,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACtE,IAAI;QACJ,QAAQ;QACR,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;KAC/E,CAAC,CAAC,CAAC;AACN,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@actuarial-ts/interchange",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Language-neutral actuarial-interchange documents for triangles, selections, results, studies, bundles, crosschecks, and portable diagnostic definitions across TypeScript, Python, and R.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -54,13 +54,14 @@
|
|
|
54
54
|
"emit-schema": "npm run build && node --experimental-strip-types scripts/emit-schema.ts"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"@actuarial-ts/core": "^0.
|
|
57
|
+
"@actuarial-ts/core": "^0.8.0",
|
|
58
|
+
"@actuarial-ts/data": "^0.8.0",
|
|
58
59
|
"zod": "^3.25.76"
|
|
59
60
|
},
|
|
60
61
|
"devDependencies": {
|
|
61
62
|
"@types/node": "^22.10.5",
|
|
62
63
|
"typescript": "^5.7.3",
|
|
63
|
-
"vitest": "^
|
|
64
|
+
"vitest": "^5.0.1",
|
|
64
65
|
"zod-to-json-schema": "^3.25.2"
|
|
65
66
|
},
|
|
66
67
|
"publishConfig": {
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import {
|
|
2
|
+
applyAnalysisScenario,
|
|
3
|
+
canonicalJson,
|
|
4
|
+
fnv1a64,
|
|
5
|
+
runAnalysisRecipe,
|
|
6
|
+
ReservingError,
|
|
7
|
+
type AnalysisDefinition,
|
|
8
|
+
type AnalysisRecipe,
|
|
9
|
+
type AnalysisResult,
|
|
10
|
+
type AnalysisScenario,
|
|
11
|
+
type CustomizationExposureObservation,
|
|
12
|
+
type ExposureAllocationTarget,
|
|
13
|
+
type ExposureRevisionSelection,
|
|
14
|
+
type HistoricalDatasetInput,
|
|
15
|
+
} from "@actuarial-ts/core";
|
|
16
|
+
import {
|
|
17
|
+
parseAnalysisDefinition,
|
|
18
|
+
parseAnalysisRecipe,
|
|
19
|
+
parseAnalysisResult,
|
|
20
|
+
parseAnalysisScenario,
|
|
21
|
+
parseCustomizationExposureObservations,
|
|
22
|
+
parseExposureAllocationTargets,
|
|
23
|
+
parseExposureRevisionSelection,
|
|
24
|
+
parseHistoricalDatasetInput,
|
|
25
|
+
} from "@actuarial-ts/data";
|
|
26
|
+
import { DEFAULT_GENERATOR, INTERCHANGE_SPEC_VERSION, stampIntegrity, type GeneratorStamp } from "../envelope.js";
|
|
27
|
+
import { snapshotInterchangeJson } from "../json.js";
|
|
28
|
+
import { parseDocument, type ParseDocumentOptions } from "../parse.js";
|
|
29
|
+
import {
|
|
30
|
+
CUSTOMIZATION_INTERCHANGE_CONTRACT_VERSION,
|
|
31
|
+
customizationAnalysisDocSchema,
|
|
32
|
+
type CustomizationAnalysisDoc,
|
|
33
|
+
} from "../schemas/customizationAnalysis.js";
|
|
34
|
+
|
|
35
|
+
function identity(value: unknown): string {
|
|
36
|
+
return `fnv1a64-jcs-v1:${fnv1a64(canonicalJson(value))}`;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface CustomizationAnalysisDocumentInput {
|
|
40
|
+
readonly history: HistoricalDatasetInput;
|
|
41
|
+
readonly analysisDefinition: AnalysisDefinition;
|
|
42
|
+
readonly recipe: AnalysisRecipe;
|
|
43
|
+
readonly result: AnalysisResult;
|
|
44
|
+
readonly scenario?: AnalysisScenario;
|
|
45
|
+
readonly exposureObservations?: readonly CustomizationExposureObservation[];
|
|
46
|
+
readonly exposureTargets?: readonly ExposureAllocationTarget[];
|
|
47
|
+
readonly exposureRevisionSelection?: ExposureRevisionSelection;
|
|
48
|
+
readonly evaluationDate?: string;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface CustomizationAnalysisDocumentOptions {
|
|
52
|
+
readonly createdAt: string;
|
|
53
|
+
readonly generator?: GeneratorStamp;
|
|
54
|
+
readonly extensions?: Readonly<Record<string, unknown>>;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function validated(input: CustomizationAnalysisDocumentInput) {
|
|
58
|
+
const history = parseHistoricalDatasetInput(input.history);
|
|
59
|
+
const analysisDefinition = parseAnalysisDefinition(input.analysisDefinition);
|
|
60
|
+
const recipe = parseAnalysisRecipe(input.recipe);
|
|
61
|
+
const result = parseAnalysisResult(input.result);
|
|
62
|
+
const scenario = input.scenario === undefined ? undefined : parseAnalysisScenario(input.scenario);
|
|
63
|
+
const exposureObservations = parseCustomizationExposureObservations(input.exposureObservations ?? []);
|
|
64
|
+
const exposureTargets = parseExposureAllocationTargets(input.exposureTargets ?? []);
|
|
65
|
+
const exposureRevisionSelection = input.exposureRevisionSelection === undefined ? undefined : parseExposureRevisionSelection(input.exposureRevisionSelection);
|
|
66
|
+
const effective = scenario === undefined ? analysisDefinition : applyAnalysisScenario(analysisDefinition, scenario);
|
|
67
|
+
const rerun = runAnalysisRecipe({ history, definition: effective, recipe, exposureObservations, exposureTargets, ...(exposureRevisionSelection === undefined ? {} : { exposureRevisionSelection }), ...(input.evaluationDate === undefined ? {} : { evaluationDate: input.evaluationDate }) });
|
|
68
|
+
if (canonicalJson(rerun) !== canonicalJson(result))
|
|
69
|
+
throw new ReservingError("BAD_INTERCHANGE", "Customization analysis result differs from an exact TypeScript rerun");
|
|
70
|
+
return { history, analysisDefinition, recipe, result, scenario, exposureObservations, exposureTargets, exposureRevisionSelection };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Creates a portable, integrity-stamped document after exact TypeScript execution verification. */
|
|
74
|
+
export function customizationAnalysisToDoc(
|
|
75
|
+
input: CustomizationAnalysisDocumentInput,
|
|
76
|
+
options: CustomizationAnalysisDocumentOptions,
|
|
77
|
+
): CustomizationAnalysisDoc {
|
|
78
|
+
const value = validated(input);
|
|
79
|
+
const exposureIdentity = { observations: value.exposureObservations, targets: value.exposureTargets, revisionSelection: value.exposureRevisionSelection ?? null };
|
|
80
|
+
const candidate = stampIntegrity<CustomizationAnalysisDoc>({
|
|
81
|
+
interchangeVersion: INTERCHANGE_SPEC_VERSION,
|
|
82
|
+
kind: "customization-analysis",
|
|
83
|
+
generator: options.generator ?? DEFAULT_GENERATOR,
|
|
84
|
+
createdAt: options.createdAt,
|
|
85
|
+
...(options.extensions === undefined ? {} : { extensions: options.extensions }),
|
|
86
|
+
customizationAnalysis: {
|
|
87
|
+
contractVersion: CUSTOMIZATION_INTERCHANGE_CONTRACT_VERSION,
|
|
88
|
+
history: value.history,
|
|
89
|
+
analysisDefinition: value.analysisDefinition,
|
|
90
|
+
recipe: value.recipe,
|
|
91
|
+
result: value.result,
|
|
92
|
+
...(value.scenario === undefined ? {} : { scenario: value.scenario }),
|
|
93
|
+
exposureObservations: value.exposureObservations,
|
|
94
|
+
exposureTargets: value.exposureTargets,
|
|
95
|
+
...(value.exposureRevisionSelection === undefined ? {} : { exposureRevisionSelection: value.exposureRevisionSelection }),
|
|
96
|
+
...(input.evaluationDate === undefined ? {} : { evaluationDate: input.evaluationDate }),
|
|
97
|
+
identities: {
|
|
98
|
+
history: identity(value.history), analysisDefinition: identity(value.analysisDefinition), recipe: identity(value.recipe), result: identity(value.result), exposure: identity(exposureIdentity),
|
|
99
|
+
...(value.scenario === undefined ? {} : { scenario: identity(value.scenario) }),
|
|
100
|
+
},
|
|
101
|
+
executionSupport: { typescript: "execute-supported-subset", python: "parse-preserve-only", r: "parse-preserve-only" },
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
const parsed = customizationAnalysisDocSchema.safeParse(candidate);
|
|
105
|
+
if (!parsed.success) throw new ReservingError("BAD_INTERCHANGE", `Invalid customization-analysis document: ${parsed.error.issues[0]?.message ?? "schema validation failed"}`);
|
|
106
|
+
return Object.freeze(snapshotInterchangeJson(candidate));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** Parses/preserves the portable document and rechecks identities and TypeScript execution. */
|
|
110
|
+
export function docToCustomizationAnalysis(value: unknown, options?: ParseDocumentOptions): CustomizationAnalysisDocumentInput & { readonly warnings: readonly string[] } {
|
|
111
|
+
const parsed = parseDocument(value, options);
|
|
112
|
+
if (parsed.doc.kind !== "customization-analysis")
|
|
113
|
+
throw new ReservingError("BAD_INTERCHANGE", `Expected kind \"customization-analysis\"; got kind \"${parsed.doc.kind}\"`);
|
|
114
|
+
const body = parsed.doc.customizationAnalysis;
|
|
115
|
+
const checked = validated({
|
|
116
|
+
history: body.history, analysisDefinition: body.analysisDefinition, recipe: body.recipe, result: body.result,
|
|
117
|
+
...(body.scenario === undefined ? {} : { scenario: body.scenario }), exposureObservations: body.exposureObservations,
|
|
118
|
+
exposureTargets: body.exposureTargets, ...(body.exposureRevisionSelection === undefined ? {} : { exposureRevisionSelection: body.exposureRevisionSelection }),
|
|
119
|
+
...(body.evaluationDate === undefined ? {} : { evaluationDate: body.evaluationDate }),
|
|
120
|
+
});
|
|
121
|
+
const exposureIdentity = { observations: checked.exposureObservations, targets: checked.exposureTargets, revisionSelection: checked.exposureRevisionSelection ?? null };
|
|
122
|
+
const expected = {
|
|
123
|
+
history: identity(checked.history), analysisDefinition: identity(checked.analysisDefinition), recipe: identity(checked.recipe), result: identity(checked.result), exposure: identity(exposureIdentity),
|
|
124
|
+
...(checked.scenario === undefined ? {} : { scenario: identity(checked.scenario) }),
|
|
125
|
+
};
|
|
126
|
+
if (canonicalJson(body.identities) !== canonicalJson(expected))
|
|
127
|
+
throw new ReservingError("BAD_INTERCHANGE", "Customization analysis contract identities do not match their canonical content");
|
|
128
|
+
return { ...checked, ...(body.evaluationDate === undefined ? {} : { evaluationDate: body.evaluationDate }), warnings: parsed.warnings };
|
|
129
|
+
}
|
package/src/envelope.ts
CHANGED
|
@@ -34,7 +34,7 @@ import { recordSchema } from "./schemas/record.js";
|
|
|
34
34
|
*/
|
|
35
35
|
|
|
36
36
|
/** The interchange spec version this package writes. */
|
|
37
|
-
export const INTERCHANGE_SPEC_VERSION = "1.
|
|
37
|
+
export const INTERCHANGE_SPEC_VERSION = "1.2.0";
|
|
38
38
|
|
|
39
39
|
/** The spec major this package accepts (spec 3.5: readers accept same-major). */
|
|
40
40
|
export const INTERCHANGE_SPEC_MAJOR = 1;
|
|
@@ -43,7 +43,7 @@ export const INTERCHANGE_SPEC_MAJOR = 1;
|
|
|
43
43
|
* This package's version, stamped into `generator` by default. A sync test
|
|
44
44
|
* asserts it matches package.json so it cannot silently drift.
|
|
45
45
|
*/
|
|
46
|
-
export const INTERCHANGE_PACKAGE_VERSION = "0.
|
|
46
|
+
export const INTERCHANGE_PACKAGE_VERSION = "0.8.0";
|
|
47
47
|
|
|
48
48
|
export interface GeneratorStamp {
|
|
49
49
|
name: string;
|
|
@@ -65,6 +65,7 @@ export const DOCUMENT_KINDS = [
|
|
|
65
65
|
"bundle",
|
|
66
66
|
"crosscheck-report",
|
|
67
67
|
"diagnostic-definition",
|
|
68
|
+
"customization-analysis",
|
|
68
69
|
] as const;
|
|
69
70
|
|
|
70
71
|
export type DocumentKind = (typeof DOCUMENT_KINDS)[number];
|
|
@@ -83,6 +84,7 @@ const SEMANTIC_BODY_KEYS: Record<DocumentKind, readonly string[]> = {
|
|
|
83
84
|
bundle: ["bundle", "interchange"],
|
|
84
85
|
"crosscheck-report": ["report"],
|
|
85
86
|
"diagnostic-definition": ["diagnosticDefinition"],
|
|
87
|
+
"customization-analysis": ["customizationAnalysis"],
|
|
86
88
|
};
|
|
87
89
|
|
|
88
90
|
/** A 16-hex-char fnv1a64 tag. */
|
package/src/index.ts
CHANGED
|
@@ -8,10 +8,12 @@ export * from "./schemas/bundle.js";
|
|
|
8
8
|
export * from "./schemas/crosscheck.js";
|
|
9
9
|
export * from "./schemas/diagnosticDefinition.js";
|
|
10
10
|
export * from "./schemas/manifest.js";
|
|
11
|
+
export * from "./schemas/customizationAnalysis.js";
|
|
11
12
|
export * from "./convert/triangle.js";
|
|
12
13
|
export * from "./convert/selection.js";
|
|
13
14
|
export * from "./convert/result.js";
|
|
14
15
|
export * from "./convert/diagnosticDefinition.js";
|
|
16
|
+
export * from "./convert/customizationAnalysis.js";
|
|
15
17
|
export * from "./referee/profiles.js";
|
|
16
18
|
export * from "./referee/crosscheck.js";
|
|
17
19
|
export * from "./referee/crosscheckStochastic.js";
|
package/src/parse.ts
CHANGED
|
@@ -14,6 +14,7 @@ import type { StudyDoc } from "./schemas/study.js";
|
|
|
14
14
|
import type { BundleDoc } from "./schemas/bundle.js";
|
|
15
15
|
import type { CrosscheckReportDoc } from "./schemas/crosscheck.js";
|
|
16
16
|
import type { DiagnosticDefinitionDoc } from "./schemas/diagnosticDefinition.js";
|
|
17
|
+
import type { CustomizationAnalysisDoc } from "./schemas/customizationAnalysis.js";
|
|
17
18
|
import { snapshotInterchangeJson } from "./json.js";
|
|
18
19
|
|
|
19
20
|
/**
|
|
@@ -51,7 +52,8 @@ export type InterchangeDocument =
|
|
|
51
52
|
| StudyDoc
|
|
52
53
|
| BundleDoc
|
|
53
54
|
| CrosscheckReportDoc
|
|
54
|
-
| DiagnosticDefinitionDoc
|
|
55
|
+
| DiagnosticDefinitionDoc
|
|
56
|
+
| CustomizationAnalysisDoc;
|
|
55
57
|
|
|
56
58
|
export interface ParseDocumentOptions {
|
|
57
59
|
/** How to treat a failed integrity check. Default "refuse". */
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AnalysisDefinition,
|
|
3
|
+
AnalysisRecipe,
|
|
4
|
+
AnalysisResult,
|
|
5
|
+
AnalysisScenario,
|
|
6
|
+
CustomizationExposureObservation,
|
|
7
|
+
ExposureAllocationTarget,
|
|
8
|
+
ExposureRevisionSelection,
|
|
9
|
+
HistoricalDatasetInput,
|
|
10
|
+
} from "@actuarial-ts/core";
|
|
11
|
+
import {
|
|
12
|
+
analysisDefinitionSchema,
|
|
13
|
+
analysisRecipeSchema,
|
|
14
|
+
analysisResultSchema,
|
|
15
|
+
analysisScenarioSchema,
|
|
16
|
+
customizationExposureObservationSchema,
|
|
17
|
+
exposureAllocationTargetSchema,
|
|
18
|
+
exposureRevisionSelectionSchema,
|
|
19
|
+
historicalDatasetInputSchema,
|
|
20
|
+
} from "@actuarial-ts/data";
|
|
21
|
+
import { z } from "zod";
|
|
22
|
+
import { envelopeShape, type GeneratorStamp } from "../envelope.js";
|
|
23
|
+
import { recordSchema } from "./record.js";
|
|
24
|
+
|
|
25
|
+
export const CUSTOMIZATION_INTERCHANGE_CONTRACT_VERSION = "actuarial-customization-interchange/1" as const;
|
|
26
|
+
const identity = z.string().regex(/^fnv1a64-jcs-v1:[0-9a-f]{16}$/);
|
|
27
|
+
|
|
28
|
+
export interface CustomizationAnalysisBody {
|
|
29
|
+
readonly contractVersion: typeof CUSTOMIZATION_INTERCHANGE_CONTRACT_VERSION;
|
|
30
|
+
readonly history: HistoricalDatasetInput;
|
|
31
|
+
readonly analysisDefinition: AnalysisDefinition;
|
|
32
|
+
readonly recipe: AnalysisRecipe;
|
|
33
|
+
readonly result: AnalysisResult;
|
|
34
|
+
readonly scenario?: AnalysisScenario;
|
|
35
|
+
readonly exposureObservations: readonly CustomizationExposureObservation[];
|
|
36
|
+
readonly exposureTargets: readonly ExposureAllocationTarget[];
|
|
37
|
+
readonly exposureRevisionSelection?: ExposureRevisionSelection;
|
|
38
|
+
readonly evaluationDate?: string;
|
|
39
|
+
readonly identities: Readonly<Record<"history" | "analysisDefinition" | "recipe" | "result" | "exposure", string>> & { readonly scenario?: string };
|
|
40
|
+
readonly executionSupport: {
|
|
41
|
+
readonly typescript: "execute-supported-subset";
|
|
42
|
+
readonly python: "parse-preserve-only";
|
|
43
|
+
readonly r: "parse-preserve-only";
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface CustomizationAnalysisDoc {
|
|
48
|
+
readonly interchangeVersion: string;
|
|
49
|
+
readonly kind: "customization-analysis";
|
|
50
|
+
readonly generator: GeneratorStamp & Record<string, unknown>;
|
|
51
|
+
readonly createdAt: string;
|
|
52
|
+
readonly extensions?: Record<string, unknown>;
|
|
53
|
+
readonly integrity: string;
|
|
54
|
+
readonly customizationAnalysis: CustomizationAnalysisBody;
|
|
55
|
+
readonly [key: string]: unknown;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const identities = z.object({
|
|
59
|
+
history: identity,
|
|
60
|
+
analysisDefinition: identity,
|
|
61
|
+
recipe: identity,
|
|
62
|
+
result: identity,
|
|
63
|
+
exposure: identity,
|
|
64
|
+
scenario: identity.optional(),
|
|
65
|
+
}).passthrough();
|
|
66
|
+
|
|
67
|
+
export const customizationAnalysisBodySchema: z.ZodType<CustomizationAnalysisBody> = z.object({
|
|
68
|
+
contractVersion: z.literal(CUSTOMIZATION_INTERCHANGE_CONTRACT_VERSION),
|
|
69
|
+
history: historicalDatasetInputSchema,
|
|
70
|
+
analysisDefinition: analysisDefinitionSchema,
|
|
71
|
+
recipe: analysisRecipeSchema,
|
|
72
|
+
result: analysisResultSchema,
|
|
73
|
+
scenario: analysisScenarioSchema.optional(),
|
|
74
|
+
exposureObservations: z.array(customizationExposureObservationSchema),
|
|
75
|
+
exposureTargets: z.array(exposureAllocationTargetSchema),
|
|
76
|
+
exposureRevisionSelection: exposureRevisionSelectionSchema.optional(),
|
|
77
|
+
evaluationDate: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
78
|
+
identities,
|
|
79
|
+
executionSupport: z.object({
|
|
80
|
+
typescript: z.literal("execute-supported-subset"),
|
|
81
|
+
python: z.literal("parse-preserve-only"),
|
|
82
|
+
r: z.literal("parse-preserve-only"),
|
|
83
|
+
}).passthrough(),
|
|
84
|
+
}).passthrough();
|
|
85
|
+
|
|
86
|
+
export const customizationAnalysisDocSchema: z.ZodType<CustomizationAnalysisDoc> = z.object({
|
|
87
|
+
...envelopeShape("customization-analysis"),
|
|
88
|
+
customizationAnalysis: customizationAnalysisBodySchema,
|
|
89
|
+
governance: recordSchema(z.unknown()).optional(),
|
|
90
|
+
}).passthrough();
|
package/src/schemas/manifest.ts
CHANGED
|
@@ -7,6 +7,7 @@ import { studyDocSchema } from "./study.js";
|
|
|
7
7
|
import { bundleDocSchema } from "./bundle.js";
|
|
8
8
|
import { crosscheckReportDocSchema } from "./crosscheck.js";
|
|
9
9
|
import { diagnosticDefinitionDocSchema } from "./diagnosticDefinition.js";
|
|
10
|
+
import { customizationAnalysisDocSchema } from "./customizationAnalysis.js";
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* Schema publication manifest (spec 3.4). The zod schemas here are the
|
|
@@ -52,6 +53,11 @@ export const INTERCHANGE_SCHEMA_MANIFEST: readonly SchemaManifestEntry[] = [
|
|
|
52
53
|
fileName: "diagnostic-definition.schema.json",
|
|
53
54
|
schema: diagnosticDefinitionDocSchema,
|
|
54
55
|
},
|
|
56
|
+
{
|
|
57
|
+
kind: "customization-analysis",
|
|
58
|
+
fileName: "customization-analysis.schema.json",
|
|
59
|
+
schema: customizationAnalysisDocSchema,
|
|
60
|
+
},
|
|
55
61
|
];
|
|
56
62
|
|
|
57
63
|
/** Options both the emit script and the drift test must pass to the converter. */
|