import { OBSERVED_COMPARISON_CONTRACT_VERSION, OBSERVED_COMPARISON_LIMITS } from "@actuarial-ts/core"; import type { DataOperation } from "./dataCapabilities.js"; import { observedComparisonRequestSchema, assessObservedComparisonEligibilityFromInput, } from "./observedComparisonContracts.js"; export function observedComparisonCapabilities(): readonly DataOperation[] { return [ { id: "comparison.observed", kind: "workflow", native: "runObservedComparison", nativePackage: "@actuarial-ts/core", entry: "runObservedComparisonFromInput", validator: "assessObservedComparisonEligibilityFromInput", parser: "parseObservedComparisonRequest", schemaName: "observedComparisonRequestSchema", schema: observedComparisonRequestSchema, input: "ObservedComparisonRequest", output: "ObservedComparisonResult", contract: OBSERVED_COMPARISON_CONTRACT_VERSION, fields: ["id", "version", "rationale", "axis", "reference", "compared", "snapshots", "declarations", "limits"], limits: { ...OBSERVED_COMPARISON_LIMITS }, work: "request-validation", checked: [ "strict-source-projection-contract", "exact-semantic-reference-bindings", "authored-coordinate-and-group-matching", "units-denominator-financial-basis-population-and-date-compatibility", "complete-resource-limits", ], deferred: [ "original-source-authenticity-and-suitability", "difference-and-ratio-execution", "complete-retained-output-size", "causality", "statistical-significance", "selection", "publication", ], coordinates: ["originId", "ageMonths", "valuationDate", "dimensions"], source: "explicit-observed-value-projections", originKinds: ["accident", "policy", "report"], temporalStructures: ["explicit-origin-periods-and-development-age-clock"], replay: ["replayObservedComparison"], replayPackage: "@actuarial-ts/core", unitRule: "No implicit conversion; differences retain declared units and scale and ratios require a positive reference value", populationRule: "Population contrasts need retained explicit bridges; arithmetic is descriptive and cannot authorize selection or aggregation", financialRule: "Known financial-basis, quantity, adjustment and denominator differences cannot be waived", options: [ { path: "axis.kind", choices: ["origin", "age", "calendar", "valuation", "segment", "knowledge"], default: null, description: "Explicit comparison question determines which exact coordinates must match", }, ], limitations: [ "Retained projection identities are not authentication; the trusted host must verify values against original producers", "A difference does not establish a driver, statistical significance, uncertainty or reserve selection", "Calendar comparisons cannot isolate maturity, cohort and calendar effects", "Structural development age zero is not an observed fitting sample; positive-age missing values remain null", ], evaluate(input) { const result = assessObservedComparisonEligibilityFromInput(input); return { findings: result.findings, status: result.status === "supported" ? "supported-with-warnings" : result.status, }; }, }, ]; }