BID · Console
Baseline · Intelligence · Decision
src/agents/intelligence/comparisons-synthesis/schema.ts 2,211 bytes · typescript
/**
 * 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>;