CRUD de QualityScorecard/Item (criterios por tenant, sem lista fixa hardcoded), novo AIJobType.SCORECARD_EVALUATION encadeado junto com ANALYSIS a partir da transcricao (mesma decisao de privacidade + exige scorecard habilitado). apps/ai-worker avalia contra todos os scorecards habilitados do tenant, prompt montado dinamicamente a partir dos itens de cada um, nunca guarda chain-of-thought do modelo (so' o resultado final validado). GET /reports/ai-dashboard agrega CallAIAnalysis+QualityEvaluation do periodo (score medio, sentimento, assuntos/objecoes, compliance alerts, ranking de agentes). Testado ponta a ponta contra o ai-worker real e Postgres real com RLS (scorecard real via API, prompt montado a partir dos itens reais, job real reservado via SKIP LOCKED, retry+dead-letter corretos) — chamada de rede real contra OpenAI/Anthropic continua nunca exercitada. Detalhes em docs/QUALITY_SCORECARDS.md. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X1HxY46WGU4G1zmVDNKcWw
36 lines
1.1 KiB
TypeScript
36 lines
1.1 KiB
TypeScript
export type {
|
|
AIProvider,
|
|
AICapabilityName,
|
|
AIProviderCredentials,
|
|
TranscribeParams,
|
|
TranscribeResult,
|
|
TranscribeSegment,
|
|
AnalyzeParams,
|
|
AnalyzeResult,
|
|
} from "./types";
|
|
export { OpenAIProvider } from "./openai-provider";
|
|
export { AnthropicProvider } from "./anthropic-provider";
|
|
export { createAIProvider, SUPPORTED_PROVIDER_TYPES } from "./registry";
|
|
export { SensitiveDataRedactor } from "./redactor";
|
|
export {
|
|
CALL_ANALYSIS_JSON_SCHEMA,
|
|
validateCallAnalysisResult,
|
|
CallAnalysisValidationError,
|
|
type CallAnalysisResult,
|
|
} from "./call-analysis-schema";
|
|
export {
|
|
resolvePrivacyLevel,
|
|
allowsTranscription,
|
|
allowsAnalysis,
|
|
type AIPrivacyLevelName,
|
|
type ResolvePrivacyParams,
|
|
} from "./privacy";
|
|
export { computeBackoffDelayMs, computeNextScheduledAt, isDeadLetter } from "./retry";
|
|
export { splitStereoWav, type StereoSplitResult } from "./wav-stereo-split";
|
|
export {
|
|
QUALITY_EVALUATION_JSON_SCHEMA,
|
|
validateQualityEvaluationResult,
|
|
QualityEvaluationValidationError,
|
|
type QualityEvaluationResult,
|
|
} from "./quality-evaluation-schema";
|