use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Item {
pub sku: String,
pub name: String,
pub category: String,
pub unit: String, pub reorder_point: f64,
pub reorder_qty: f64,
pub cost: f64,
pub currency: String,
pub attributes: Value,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Location {
pub id: String,
pub name: String,
pub location_type: String, pub parent_id: Option<String>,
pub address: Option<String>,
pub capacity_units: Option<f64>, pub capacity_weight_kg: Option<f64>, pub capacity_volume_m3: Option<f64>, pub used_units: f64,
pub used_weight_kg: f64,
pub used_volume_m3: f64,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct PickOrder {
pub id: String,
pub status: String, pub order_reference: String,
pub lines: Vec<PickLine>,
pub assigned_to: Option<String>,
pub wave_id: Option<String>,
pub created_at: String,
pub updated_at: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct PickLine {
pub sku: String,
pub quantity: f64,
pub from_location: String,
pub picked_qty: f64,
pub status: String, }
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct PutawayRule {
pub id: String,
pub category: String, pub target_zone: String, pub priority: i32,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct CycleCount {
pub id: String,
pub location_id: String,
pub status: String, pub scheduled_date: String,
pub counted_by: Option<String>,
pub discrepancies: Vec<Value>,
pub completed_at: Option<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Wave {
pub id: String,
pub name: String,
pub status: String, pub pick_ids: Vec<String>,
pub priority: String,
pub created_at: String,
pub released_at: Option<String>,
pub completed_at: Option<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct BarcodeLabel {
pub id: String,
pub barcode_type: String, pub entity_id: String,
pub barcode_format: String, pub barcode_value: String,
pub label_text: Vec<String>,
pub generated_at: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SerializedItem {
pub serial_number: String,
pub sku: String,
pub status: String, pub location_id: String,
pub lot_number: Option<String>,
pub manufacture_date: Option<String>,
pub expiry_date: Option<String>,
pub rfid_tag: Option<String>,
pub qr_code: Option<String>,
pub history: Vec<SerialEvent>,
pub metadata: Value,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SerialEvent {
pub event_type: String, pub location: String,
pub actor: String,
pub timestamp: String,
pub reference: Option<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct RfidTag {
pub epc: String, pub serial_number: Option<String>,
pub sku: Option<String>,
pub location_id: String,
pub last_read_at: String,
pub read_count: u32,
pub status: String, }
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct StockLevel {
pub sku: String,
pub location_id: String,
pub quantity: f64,
pub reserved: f64,
pub lot_number: Option<String>,
pub expiry_date: Option<String>,
pub updated_at: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct StockMovement {
pub id: String,
pub movement_type: String, pub sku: String,
pub quantity: f64,
pub from_location: Option<String>,
pub to_location: Option<String>,
pub reference: String,
pub actor: String,
pub lot_number: Option<String>,
pub timestamp: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct BomEntry {
pub parent_sku: String,
pub component_sku: String,
pub quantity: f64,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Reservation {
pub id: String,
pub sku: String,
pub location_id: String,
pub quantity: f64,
pub reference: String, pub expires_at: Option<String>,
pub created_at: String,
}