93 lines
2.8 KiB
TypeScript
93 lines
2.8 KiB
TypeScript
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<typeof findingItemSchema>;
|
|
export type V3FindingItem = z.infer<typeof v3FindingItemSchema>;
|
|
export type InternalFindings = z.infer<typeof internalFindingsSchema>;
|
|
export type AuditClassification = z.infer<typeof auditClassificationSchema>;
|
|
export type AuditGenerationResult = z.infer<typeof auditGenerationResultSchema>;
|
|
export type AuditSummary = z.infer<typeof auditSummarySchema>;
|
|
export type PublicAuditText = z.infer<typeof publicAuditTextSchema>;
|
|
export type EmailDraft = z.infer<typeof emailDraftSchema>;
|
|
export type EmailSubject = z.infer<typeof emailSubjectSchema>;
|
|
export type CallScript = z.infer<typeof callScriptSchema>;
|
|
export type FollowUpDraft = z.infer<typeof followUpDraftSchema>;
|
|
export type QualityReview = z.infer<typeof qualityReviewSchema>;
|