Skip to content

Deviation Management Workflow ​

Deviation management tracks unplanned departures from approved procedures. Severity decides the path; history records every classification and review.

Severity ​

SeverityInvestigation
CriticalFull investigation and CAPA
MajorInvestigation and risk assessment
MinorDocumentation 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

See Also ​