datasynth_core/models/sourcing/
rfx.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 RfxType {
11 Rfi,
13 #[default]
15 Rfp,
16 Rfq,
18}
19
20#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
22#[serde(rename_all = "snake_case")]
23pub enum RfxStatus {
24 #[default]
26 Draft,
27 Published,
29 Closed,
31 Awarded,
33 Cancelled,
35 NoAward,
37}
38
39#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
41#[serde(rename_all = "snake_case")]
42pub enum ScoringMethod {
43 LowestPrice,
45 #[default]
47 BestValue,
48 QualityBased,
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize)]
54pub struct RfxEvaluationCriterion {
55 pub name: String,
57 pub weight: f64,
59 pub description: String,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize)]
65pub struct RfxLineItem {
66 pub item_number: u16,
68 pub description: String,
70 pub material_id: Option<String>,
72 pub quantity: Decimal,
74 pub uom: String,
76 pub target_price: Option<Decimal>,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize)]
82pub struct RfxEvent {
83 pub rfx_id: String,
85 pub rfx_type: RfxType,
87 pub company_code: String,
89 pub title: String,
91 pub description: String,
93 pub status: RfxStatus,
95 pub sourcing_project_id: String,
97 pub category_id: String,
99 pub scoring_method: ScoringMethod,
101 pub criteria: Vec<RfxEvaluationCriterion>,
103 pub line_items: Vec<RfxLineItem>,
105 pub invited_vendors: Vec<String>,
107 pub publish_date: NaiveDate,
109 pub response_deadline: NaiveDate,
111 pub bid_count: u32,
113 pub owner_id: String,
115 pub awarded_vendor_id: Option<String>,
117 pub awarded_bid_id: Option<String>,
119}