datasynth_core/models/sourcing/
sourcing_project.rs1use chrono::NaiveDate;
4use rust_decimal::Decimal;
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
9#[serde(rename_all = "snake_case")]
10pub enum SourcingProjectType {
11 #[default]
13 NewSourcing,
14 Renewal,
16 Consolidation,
18 Emergency,
20 StrategicPartnership,
22}
23
24#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
26#[serde(rename_all = "snake_case")]
27pub enum SourcingProjectStatus {
28 #[default]
30 Draft,
31 SpendAnalysis,
33 Qualification,
35 RfxActive,
37 Evaluation,
39 Negotiation,
41 Awarded,
43 Completed,
45 Cancelled,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize)]
51pub struct SourcingProject {
52 pub project_id: String,
54 pub project_name: String,
56 pub company_code: String,
58 pub project_type: SourcingProjectType,
60 pub status: SourcingProjectStatus,
62 pub category_id: String,
64 #[serde(with = "rust_decimal::serde::str")]
66 pub estimated_annual_spend: Decimal,
67 pub target_savings_pct: f64,
69 pub owner_id: String,
71 pub start_date: NaiveDate,
73 pub target_end_date: NaiveDate,
75 pub actual_end_date: Option<NaiveDate>,
77 pub spend_analysis_id: Option<String>,
79 pub rfx_ids: Vec<String>,
81 pub contract_id: Option<String>,
83 pub actual_savings_pct: Option<f64>,
85}