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