/**
* Comparisons & Synthesis — input and output schemas (Std 2 + Std 11).
*/
import { z } from 'zod';
import { performanceMetricsOutputSchema } from '../performance-metrics/schema.js';
export const comparisonsSynthesisInputSchema = performanceMetricsOutputSchema;
export type ComparisonsSynthesisInput = z.infer<typeof comparisonsSynthesisInputSchema>;
export const statisticalContextSchema = z.object({
mean: z.number().nullable().optional(),
stdDev: z.number().nullable().optional(),
rank: z.number().nullable().optional(),
significant: z.boolean().optional(),
notes: z.array(z.string()).default([]),
});
export type StatisticalContext = z.infer<typeof statisticalContextSchema>;
export const comparisonSchema = z.object({
comparisonId: z.string(),
/** e.g. "period-over-period" | "peer-benchmark" | "ratio" | "rank" */
method: z.string(),
/** methodology_id from the library, or null if the agent applied a built-in trivial method. */
methodologyId: z.string().nullable(),
methodologyRationale: z.string(),
entitiesCompared: z.array(z.string()),
periodsCovered: z.array(z.string()),
metricKey: z.string(),
/** The actual comparison output — shape varies by method, kept as a free object. */
result: z.record(z.unknown()),
/** Comparability check outcome — Std 4 + Std 8. */
comparabilityCheckStatus: z.enum(['passed', 'flagged', 'failed']),
comparabilityNotes: z.array(z.string()),
statisticalContext: statisticalContextSchema.optional(),
inputLineage: z.array(z.string()),
confidence: z.number().min(0).max(1),
flags: z.array(z.string()),
});
export type Comparison = z.infer<typeof comparisonSchema>;
export const comparabilityFailureSchema = z.object({
comparisonId: z.string(),
attempted: z.string(),
reason: z.string(),
});
export type ComparabilityFailure = z.infer<typeof comparabilityFailureSchema>;
export const comparisonsSynthesisOutputSchema = z.object({
comparisons: z.array(comparisonSchema),
comparabilityFailures: z.array(comparabilityFailureSchema),
appliedMethodologies: z.array(z.string()),
notes: z.array(z.string()),
});
export type ComparisonsSynthesisOutput = z.infer<typeof comparisonsSynthesisOutputSchema>;