use rust_decimal::Decimal;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct PartsIssue {
pub company_id: Uuid,
pub visit_id: Uuid,
pub warehouse_id: Uuid,
pub idempotency_key: String,
pub lines: Vec<IssueLine>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct IssueLine {
pub item_id: Uuid,
pub quantity: Decimal,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct IssueAck {
pub total_value: Decimal,
pub lines: Vec<IssuedLineValue>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct IssuedLineValue {
pub item_id: Uuid,
pub quantity: Decimal,
pub rate: Decimal,
pub value: Decimal,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct InventoryRejected {
pub code: String,
pub message: String,
}
#[async_trait::async_trait]
pub trait InventoryPort: Send + Sync {
async fn issue_parts(&self, req: &PartsIssue) -> Result<IssueAck, InventoryRejected>;
}