Skip to main content

datasynth_eval/process_mining/
mod.rs

1//! OCEL 2.0 process mining evaluation module.
2//!
3//! Validates event sequence validity, object lifecycle completeness,
4//! and process variant distribution.
5
6pub mod enrichment_quality;
7pub mod event_sequence;
8pub mod variant_analysis;
9
10pub use enrichment_quality::*;
11pub use event_sequence::{EventSequenceAnalysis, EventSequenceAnalyzer, ProcessEventData};
12pub use variant_analysis::{VariantAnalysis, VariantAnalyzer, VariantData};
13
14use serde::{Deserialize, Serialize};
15
16/// Combined process mining evaluation results.
17#[derive(Debug, Clone, Serialize, Deserialize)]
18pub struct ProcessMiningEvaluation {
19    /// Event sequence analysis.
20    pub event_sequence: Option<EventSequenceAnalysis>,
21    /// Variant analysis.
22    pub variants: Option<VariantAnalysis>,
23    /// Overall pass/fail.
24    pub passes: bool,
25    /// Issues found.
26    pub issues: Vec<String>,
27}
28
29impl ProcessMiningEvaluation {
30    /// Create a new empty evaluation.
31    pub fn new() -> Self {
32        Self {
33            event_sequence: None,
34            variants: None,
35            passes: true,
36            issues: Vec::new(),
37        }
38    }
39
40    /// Check thresholds and update pass status.
41    pub fn check_thresholds(&mut self) {
42        self.issues.clear();
43        if let Some(ref es) = self.event_sequence {
44            if !es.passes {
45                self.issues.extend(es.issues.clone());
46            }
47        }
48        if let Some(ref va) = self.variants {
49            if !va.passes {
50                self.issues.extend(va.issues.clone());
51            }
52        }
53        self.passes = self.issues.is_empty();
54    }
55}
56
57impl Default for ProcessMiningEvaluation {
58    fn default() -> Self {
59        Self::new()
60    }
61}