Skip to main content

datasynth_core/models/sourcing/
bid.rs

1//! Supplier bid models for RFx responses.
2
3use chrono::NaiveDate;
4use rust_decimal::Decimal;
5use serde::{Deserialize, Serialize};
6
7/// Status of a supplier bid.
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
9#[serde(rename_all = "snake_case")]
10pub enum BidStatus {
11    /// Bid submitted, awaiting evaluation
12    #[default]
13    Submitted,
14    /// Under evaluation
15    UnderEvaluation,
16    /// Bid accepted (winner)
17    Accepted,
18    /// Bid rejected
19    Rejected,
20    /// Bid withdrawn by vendor
21    Withdrawn,
22    /// Technically disqualified
23    Disqualified,
24}
25
26/// Line item within a supplier bid.
27#[derive(Debug, Clone, Serialize, Deserialize)]
28pub struct BidLineItem {
29    /// Item number (matches RFx line item)
30    pub item_number: u16,
31    /// Offered unit price
32    #[serde(with = "rust_decimal::serde::str")]
33    pub unit_price: Decimal,
34    /// Offered quantity
35    pub quantity: Decimal,
36    /// Total line amount
37    #[serde(with = "rust_decimal::serde::str")]
38    pub total_amount: Decimal,
39    /// Lead time in days
40    pub lead_time_days: u32,
41    /// Vendor's notes for this item
42    pub notes: Option<String>,
43}
44
45/// A supplier's bid in response to an RFx.
46#[derive(Debug, Clone, Serialize, Deserialize)]
47pub struct SupplierBid {
48    /// Unique bid identifier
49    pub bid_id: String,
50    /// RFx this bid responds to
51    pub rfx_id: String,
52    /// Vendor submitting the bid
53    pub vendor_id: String,
54    /// Company code
55    pub company_code: String,
56    /// Bid status
57    pub status: BidStatus,
58    /// Submission date
59    pub submission_date: NaiveDate,
60    /// Bid line items
61    pub line_items: Vec<BidLineItem>,
62    /// Total bid amount
63    #[serde(with = "rust_decimal::serde::str")]
64    pub total_amount: Decimal,
65    /// Validity period (days from submission)
66    pub validity_days: u32,
67    /// Payment terms offered
68    pub payment_terms: String,
69    /// Delivery terms (incoterms)
70    pub delivery_terms: Option<String>,
71    /// Technical proposal summary
72    pub technical_summary: Option<String>,
73    /// Whether the bid was submitted on time
74    pub is_on_time: bool,
75    /// Whether the bid is technically compliant
76    pub is_compliant: bool,
77}