Skip to main content

datasynth_core/models/sourcing/
qualification.rs

1//! Supplier qualification models for vendor evaluation and certification.
2
3use chrono::NaiveDate;
4use serde::{Deserialize, Serialize};
5
6/// Status of supplier qualification.
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
8#[serde(rename_all = "snake_case")]
9pub enum QualificationStatus {
10    /// Qualification not started
11    #[default]
12    Pending,
13    /// Qualification in progress
14    InProgress,
15    /// Supplier qualified (passed)
16    Qualified,
17    /// Conditionally qualified (with restrictions)
18    ConditionallyQualified,
19    /// Supplier disqualified (failed)
20    Disqualified,
21    /// Qualification expired
22    Expired,
23}
24
25/// A criterion used for qualification scoring.
26#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct QualificationCriterion {
28    /// Criterion name (e.g., "Financial Stability", "Quality Management")
29    pub name: String,
30    /// Weight in total score (0.0 to 1.0)
31    pub weight: f64,
32    /// Minimum passing score (0.0 to 100.0)
33    pub min_score: f64,
34    /// Whether this criterion is mandatory (failing = disqualified)
35    pub is_mandatory: bool,
36}
37
38/// Score for a single qualification criterion.
39#[derive(Debug, Clone, Serialize, Deserialize)]
40pub struct QualificationScore {
41    /// Criterion name
42    pub criterion_name: String,
43    /// Score achieved (0.0 to 100.0)
44    pub score: f64,
45    /// Whether the criterion was passed
46    pub passed: bool,
47    /// Evaluator comments
48    pub comments: Option<String>,
49}
50
51/// A supplier certification record.
52#[derive(Debug, Clone, Serialize, Deserialize)]
53pub struct SupplierCertification {
54    /// Certification ID
55    pub certification_id: String,
56    /// Vendor ID
57    pub vendor_id: String,
58    /// Certification type (e.g., "ISO 9001", "ISO 14001", "SOC 2")
59    pub certification_type: String,
60    /// Issuing body
61    pub issuing_body: String,
62    /// Issue date
63    pub issue_date: NaiveDate,
64    /// Expiry date
65    pub expiry_date: NaiveDate,
66    /// Is the certification currently valid
67    pub is_valid: bool,
68}
69
70/// Supplier qualification record.
71#[derive(Debug, Clone, Serialize, Deserialize)]
72pub struct SupplierQualification {
73    /// Unique qualification ID
74    pub qualification_id: String,
75    /// Vendor ID being qualified
76    pub vendor_id: String,
77    /// Sourcing project ID (if applicable)
78    pub sourcing_project_id: Option<String>,
79    /// Company code
80    pub company_code: String,
81    /// Qualification status
82    pub status: QualificationStatus,
83    /// Qualification start date
84    pub start_date: NaiveDate,
85    /// Qualification completion date
86    pub completion_date: Option<NaiveDate>,
87    /// Validity period end date
88    pub valid_until: Option<NaiveDate>,
89    /// Individual criterion scores
90    pub scores: Vec<QualificationScore>,
91    /// Overall weighted score
92    pub overall_score: f64,
93    /// Evaluator ID
94    pub evaluator_id: String,
95    /// Certifications provided
96    pub certifications: Vec<String>,
97    /// Conditions or restrictions (if conditionally qualified)
98    pub conditions: Option<String>,
99}