Deviation Management Workflow
Deviation management tracks unplanned departures from approved procedures. Severity decides the path; history records every classification and review.
Severity
| Severity | Investigation |
|---|---|
| Critical | Full investigation and CAPA |
| Major | Investigation and risk assessment |
| Minor | Documentation and root cause |
Implementation
dart
final deviationDefinition = Workflow<
Deviation,
DeviationResult,
DeviationFailure
>(
code: 'quality.deviation',
version: 1,
input: deviationSchema,
output: deviationResultSchema,
failure: deviationFailureSchema,
);
final deviationHandler = deviationDefinition.implement(
fingerprint: 'quality.deviation:v1',
execute: (workflow, deviation) async {
final classification = await workflow.request(
classify,
deviation,
id: 'classify',
title: 'Classify deviation',
audience: Audience(roleIds: ['qa_specialist']),
);
switch (classification.severity) {
case Severity.critical:
await workflow.request(
investigate,
deviation,
id: 'critical-investigation',
title: 'Critical investigation',
audience: Audience(roleIds: ['qa_manager']),
);
await workflow.perform(createCapa, deviation, id: 'capa');
case Severity.major:
await workflow.request(
investigate,
deviation,
id: 'major-investigation',
title: 'Major investigation',
audience: Audience(roleIds: ['qa_specialist']),
);
await workflow.perform(riskAssessment, deviation, id: 'risk');
case Severity.minor:
await workflow.perform(document, deviation, id: 'document');
}
final approval = await workflow.request(
qaApproval,
deviation,
id: 'qa-approval',
title: 'QA approval',
audience: Audience(roleIds: ['qa_manager']),
);
return approval.approved
? DeviationResult.closed()
: DeviationResult.rejected();
},
);Dart switch over the recorded classification replaces a graph oneOf gateway. Unchosen paths are never scheduled.
Compliance
- Severity-based escalation
- Mandatory CAPA on the critical path
- QA approval before closure
- Audited cancel, retry, and redrive