use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize)]
#[allow(dead_code)]
pub struct LabassessOutput {
pub version: String,
pub status: String,
pub data: LabassessData,
}
#[derive(Debug, Clone, Deserialize)]
#[allow(dead_code)]
pub struct LabassessData {
pub mode: String,
pub patient: PatientInfo,
pub scored_biomarkers: Vec<ScoredBiomarker>,
#[serde(default)]
pub derived_values: Vec<DerivedValue>,
#[serde(default)]
pub patterns_detected: Vec<PatternDetected>,
#[serde(default)]
pub red_flags: Vec<RedFlag>,
pub summary: Summary,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct PatientInfo {
pub sex: Option<String>,
pub age: Option<u8>,
}
#[derive(Debug, Clone, Deserialize)]
#[allow(dead_code)]
pub struct ScoredBiomarker {
pub name: String,
pub standardized_name: String,
pub value: f64,
pub unit: String,
pub status: String,
pub severity: String,
}
#[derive(Debug, Clone, Deserialize)]
#[allow(dead_code)]
pub struct DerivedValue {
pub name: String,
pub value: f64,
pub status: String,
}
#[derive(Debug, Clone, Deserialize)]
#[allow(dead_code)]
pub struct PatternDetected {
pub name: String,
pub confidence: String,
#[serde(default)]
pub criteria_met: Vec<String>,
pub action: String,
}
#[derive(Debug, Clone, Deserialize)]
#[allow(dead_code)]
pub struct RedFlag {
pub marker: String,
pub value: f64,
pub unit: String,
pub urgency: String,
pub action: String,
pub referral: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Summary {
pub total_markers: usize,
pub scored: usize,
pub unknown: usize,
pub optimal: usize,
pub good: usize,
pub attention: usize,
pub marginal: usize,
pub concern: usize,
}
#[derive(Debug, Clone, Deserialize)]
pub struct CatalogFile {
#[serde(default)]
pub product: Vec<Product>,
#[serde(default)]
pub brand: Vec<Brand>,
#[serde(default)]
pub interaction: Vec<Interaction>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Product {
pub id: String,
pub name: String,
pub brand_id: String,
pub category: String,
pub form: String,
pub dosage: String,
pub unit: String,
pub frequency: String,
#[serde(default)]
pub description: String,
#[serde(default)]
pub targets: Vec<BiomarkerTarget>,
#[serde(default)]
pub contraindications: Vec<String>,
#[serde(default)]
pub notes: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct BiomarkerTarget {
pub biomarker: String,
pub direction: String,
pub evidence: String,
#[serde(default)]
pub mechanism: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Brand {
pub id: String,
pub name: String,
pub website: String,
pub country: String,
pub verified: bool,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Interaction {
pub product_a: String,
pub product_b: String,
pub severity: String,
pub description: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct Recommendation {
pub priority: String,
pub product: Product,
pub rationale: String,
pub target_biomarkers: Vec<TargetedBiomarker>,
pub evidence_level: String,
pub score: f64,
}
#[derive(Debug, Clone, Serialize)]
pub struct TargetedBiomarker {
pub biomarker: String,
pub current_value: f64,
pub current_unit: String,
pub current_status: String,
pub expected_direction: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct RecommendOutput {
pub patient: PatientInfo,
pub assessment_summary: Summary,
pub recommendations: Vec<Recommendation>,
pub interaction_warnings: Vec<InteractionWarning>,
pub total_recommendations: usize,
}
#[derive(Debug, Clone, Serialize)]
pub struct InteractionWarning {
pub products: Vec<String>,
pub severity: String,
pub description: String,
}