import { z } from "zod"; const nonEmptyTextSchema = z.string().trim().min(1); export const legacyFindingItemSchema = z.object({ section: z.string(), finding: z.string(), suggestion: z.string(), }); export const v3FindingItemSchema = z.object({ skill_id: nonEmptyTextSchema, observation: nonEmptyTextSchema, customer_benefit: nonEmptyTextSchema, public_phrasing: nonEmptyTextSchema, severity: z.union([z.literal(1), z.literal(2), z.literal(3)]), evidence: nonEmptyTextSchema, applies: z.boolean(), }); export const findingItemSchema = legacyFindingItemSchema; export const internalFindingsSchema = z.object({ findings: z.array(findingItemSchema), summary: z.string(), }); export const auditClassificationSchema = z.object({ findings: z.array(v3FindingItemSchema).min(1), summary: nonEmptyTextSchema, usedSkills: z.array(nonEmptyTextSchema).nullable(), }); export const auditGenerationResultSchema = z.object({ findings: z.array(v3FindingItemSchema).min(1), usedSkills: z.array(nonEmptyTextSchema).min(1), publicAuditText: nonEmptyTextSchema, finalSummary: nonEmptyTextSchema, emailSubject: nonEmptyTextSchema, emailBody: nonEmptyTextSchema, phoneScript: nonEmptyTextSchema, ctaType: z.enum(["anruf", "termin", "rueckruf"]), }); export const auditSummarySchema = z.object({ summary: z.string(), keyFindings: z.array(z.string()), }); export const publicAuditTextSchema = z.object({ publicText: z.string(), }); export const emailDraftSchema = z.object({ body: z.string(), }); export const emailSubjectSchema = z.object({ subject: z.string(), }); export const callScriptSchema = z.object({ openingLine: z.string(), callScript: z.array(z.string()), closeLine: z.string(), }); export const followUpDraftSchema = z.object({ message: z.string(), followInDays: z.number().int().min(0).nullable(), goals: z.array(z.string()).nullable(), }); export const qualityReviewSchema = z.object({ isValid: z.boolean(), issues: z.array(z.string()), suggestions: z.array(z.string()), notes: z.array(z.string()).nullable(), }); export type FindingItem = z.infer; export type V3FindingItem = z.infer; export type InternalFindings = z.infer; export type AuditClassification = z.infer; export type AuditGenerationResult = z.infer; export type AuditSummary = z.infer; export type PublicAuditText = z.infer; export type EmailDraft = z.infer; export type EmailSubject = z.infer; export type CallScript = z.infer; export type FollowUpDraft = z.infer; export type QualityReview = z.infer;