wulf-pulse/lib/services/workflow-steps/validate.ts

50 lines
1.7 KiB
TypeScript

/**
* Validate Step — validates classification results against DB picklists.
* Config: {
* required_fields?: string[] // optional list of fields that must be present
* }
*/
import { registerWorkflowStepExecutor } from '../ticket-workflow-engine';
import { triageValidator } from '../triage-validator';
import { TicketWorkflowStep, WorkflowStepContext, WorkflowStepResult } from '../../types/ticket-workflow';
import { ClassificationResult } from '../../types/workflow';
async function executeValidate(
step: TicketWorkflowStep,
context: WorkflowStepContext,
_executionId: number
): Promise<WorkflowStepResult> {
// Build ClassificationResult from context.classification
const classification: ClassificationResult = {
branch: context.classification?.branch_routing || null,
ticket_type: context.classification?.ticket_type || null,
issue_classification: context.classification?.issue_classification || null,
priority: context.classification?.priority || null,
queue: context.classification?.queue_routing || null,
overall_confidence: 'medium',
needs_ai: false,
ai_reasons: []
};
// Run validation
const validationResult = await triageValidator.validate(classification);
// Store validation result in context for later steps
context.validation = validationResult;
// Check for failed fields
const validationFailedFields = validationResult.errors.map(e => e.field);
return {
success: true,
output: {
is_valid: validationResult.is_valid,
validation_errors: validationResult.errors,
validation_failed_fields: validationFailedFields,
total_errors: validationResult.errors.length
}
};
}
registerWorkflowStepExecutor('validate', executeValidate);