use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PatientInfo {
pub name: String,
pub dob: String,
#[serde(default)]
pub address: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PrescriberInfo {
pub name: String,
#[serde(default)]
pub credentials: Option<String>,
#[serde(default)]
pub license: Option<String>,
#[serde(default)]
pub address: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Medication {
pub drug: String,
pub strength: String,
#[serde(default)]
pub form: Option<String>,
pub quantity: u32,
pub sig: String,
#[serde(default)]
pub refills: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PrescriptionInput {
pub patient: PatientInfo,
pub prescriber: PrescriberInfo,
pub medications: Vec<Medication>,
#[serde(default)]
pub diagnosis: Option<String>,
#[serde(default)]
pub notes: Option<String>,
#[serde(default)]
pub date: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
pub struct Prescription {
pub id: String,
pub patient: PatientInfo,
pub prescriber: PrescriberInfo,
pub medications: Vec<Medication>,
pub diagnosis: Option<String>,
pub notes: Option<String>,
pub date: String,
pub verification_hash: String,
pub qr_payload: String,
pub generated_at: String,
}
#[derive(Debug, Serialize)]
pub struct GenerateResult {
pub prescription_id: String,
pub output_file: String,
pub verification_hash: String,
pub patient_name: String,
pub prescriber_name: String,
pub medication_count: usize,
pub generated_at: String,
}
#[derive(Debug, Serialize)]
pub struct VerifyResult {
pub valid: bool,
pub version: String,
pub prescription_id: String,
pub hash: String,
pub timestamp: String,
}