labscript 0.1.0

Prescription PDF generator with e-signature and QR verification
use serde::{Deserialize, Serialize};

// ── Patient info ──

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PatientInfo {
    pub name: String,
    pub dob: String,
    #[serde(default)]
    pub address: Option<String>,
}

// ── Prescriber info ──

#[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>,
}

// ── Medication ──

#[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>,
}

// ── Full prescription (JSON input) ──

#[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>,
}

// ── Assembled prescription (ready for PDF) ──

#[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,
}

// ── Generate success output ──

#[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,
}

// ── Verify output ──

#[derive(Debug, Serialize)]
pub struct VerifyResult {
    pub valid: bool,
    pub version: String,
    pub prescription_id: String,
    pub hash: String,
    pub timestamp: String,
}