Skip to main content

qualia_core_db/specialized_libs/medical_computing/
library.rs

1use super::*;
2
3/// Medical Computing Library Manager
4pub struct MedicalComputingLibrary {
5    patient_manager: PatientManager,
6    clinical_analyzer: ClinicalAnalyzer,
7    medical_imaging: MedicalImaging,
8    drug_discovery: DrugDiscovery,
9    compliance_monitor: MedicalComplianceMonitor,
10}
11impl MedicalComputingLibrary {
12    /// Create new medical computing library
13    pub fn new() -> Self {
14        Self {
15            patient_manager: PatientManager::new(),
16            clinical_analyzer: ClinicalAnalyzer::new(),
17            medical_imaging: MedicalImaging::new(),
18            drug_discovery: DrugDiscovery::new(),
19            compliance_monitor: MedicalComplianceMonitor::new(),
20        }
21    }
22
23    /// Initialize the library
24    pub fn initialize(&mut self) -> Result<(), MedicalError> {
25        // Initialize patient manager
26        self.patient_manager.initialize()?;
27
28        // Initialize clinical analyzer
29        self.clinical_analyzer.initialize()?;
30
31        // Initialize medical imaging
32        self.medical_imaging.initialize()?;
33
34        // Initialize drug discovery
35        self.drug_discovery.initialize()?;
36
37        // Initialize compliance monitor
38        self.compliance_monitor.initialize()?;
39
40        // Seed default patient for testing
41        let default_patient = Patient::new();
42        let _ = self.patient_manager.create_patient(default_patient);
43
44        Ok(())
45    }
46
47    /// Create a new patient record
48    pub fn create_patient_record(
49        &mut self,
50        patient: Patient,
51    ) -> Result<MedicalOperationResult<Patient>, MedicalError> {
52        let start_time = std::time::Instant::now();
53
54        // Validate patient data
55        self.patient_manager.validate_patient(&patient)?;
56
57        // Create patient record
58        let created_patient = self.patient_manager.create_patient(patient)?;
59
60        let execution_time = start_time.elapsed().as_millis() as u64;
61
62        Ok(MedicalOperationResult {
63            result: created_patient,
64            execution_time,
65            privacy_score: None,
66            compliance_status: ComplianceStatus::Compliant,
67            audit_trail: Vec::new(),
68        })
69    }
70
71    /// Analyze clinical data
72    pub fn analyze_clinical_data(
73        &mut self,
74        patient_id: &str,
75        data_type: ClinicalDataType,
76    ) -> Result<MedicalOperationResult<ClinicalAnalysis>, MedicalError> {
77        let start_time = std::time::Instant::now();
78
79        // Get patient data
80        let patient = self.patient_manager.get_patient(patient_id)?;
81
82        // Analyze clinical data
83        let analysis = self.clinical_analyzer.analyze_data(&patient, data_type)?;
84
85        let execution_time = start_time.elapsed().as_millis() as u64;
86
87        Ok(MedicalOperationResult {
88            result: analysis,
89            execution_time,
90            privacy_score: None,
91            compliance_status: ComplianceStatus::Compliant,
92            audit_trail: Vec::new(),
93        })
94    }
95
96    /// Real transparent Bayesian differential over a caller-supplied, non-authoritative
97    /// knowledge base. Returns a ranked epistemic proposal (never a diagnosis); the honest
98    /// label lives in `DifferentialProposal::epistemic_status`.
99    pub fn analyze_differential(
100        &mut self,
101        observed_findings: &[String],
102        knowledge_base: &DiagnosticKnowledgeBase,
103    ) -> Result<MedicalOperationResult<DifferentialProposal>, MedicalError> {
104        let start_time = std::time::Instant::now();
105        let proposal = self
106            .clinical_analyzer
107            .analyze_differential(observed_findings, knowledge_base)?;
108        let execution_time = start_time.elapsed().as_millis() as u64;
109        Ok(MedicalOperationResult {
110            result: proposal,
111            execution_time,
112            privacy_score: None,
113            compliance_status: ComplianceStatus::Compliant,
114            audit_trail: Vec::new(),
115        })
116    }
117
118    /// Real 2-D DSP over a caller-provided intensity grid (statistics, histogram,
119    /// window/level, threshold segmentation, Sobel edge magnitude). The result is
120    /// honestly labeled signal processing, never a diagnosis.
121    pub fn analyze_medical_image_grid(
122        &mut self,
123        data: &[f64],
124        width: usize,
125        height: usize,
126        bins: usize,
127        threshold: SegmentationThreshold,
128        window: Option<(f64, f64)>,
129    ) -> Result<MedicalOperationResult<ImageAnalysisResult>, MedicalError> {
130        let start_time = std::time::Instant::now();
131        let result = self
132            .medical_imaging
133            .analyze_grid(data, width, height, bins, threshold, window)?;
134        let execution_time = start_time.elapsed().as_millis() as u64;
135        Ok(MedicalOperationResult {
136            result,
137            execution_time,
138            privacy_score: None,
139            compliance_status: ComplianceStatus::Compliant,
140            audit_trail: Vec::new(),
141        })
142    }
143
144    /// Process medical image
145    pub fn process_medical_image(
146        &mut self,
147        image: MedicalImage,
148        processing_type: ImageProcessingType,
149    ) -> Result<MedicalOperationResult<ProcessedImage>, MedicalError> {
150        let start_time = std::time::Instant::now();
151
152        // Validate image
153        self.medical_imaging.validate_image(&image)?;
154
155        // Process image
156        let processed_image = self
157            .medical_imaging
158            .process_image(&image, processing_type)?;
159
160        let execution_time = start_time.elapsed().as_millis() as u64;
161
162        Ok(MedicalOperationResult {
163            result: processed_image,
164            execution_time,
165            privacy_score: None,
166            compliance_status: ComplianceStatus::Compliant,
167            audit_trail: Vec::new(),
168        })
169    }
170
171    /// Screen compounds by rule-based filtering + Tanimoto similarity ranking.
172    /// `query_smiles` is an optional reference structure for similarity ranking. The
173    /// result is honestly labeled (see `ScreeningProposal::epistemic_status`) — it is
174    /// NOT a binding-affinity or efficacy prediction.
175    pub fn screen_compounds(
176        &mut self,
177        compounds: Vec<Compound>,
178        target: DrugTarget,
179        query_smiles: Option<&str>,
180    ) -> Result<MedicalOperationResult<ScreeningProposal>, MedicalError> {
181        let start_time = std::time::Instant::now();
182
183        // Validate compounds
184        self.drug_discovery.validate_compounds(&compounds)?;
185
186        // Screen compounds
187        let results = self
188            .drug_discovery
189            .screen_compounds(&compounds, &target, query_smiles)?;
190
191        let execution_time = start_time.elapsed().as_millis() as u64;
192
193        Ok(MedicalOperationResult {
194            result: results,
195            execution_time,
196            privacy_score: None,
197            compliance_status: ComplianceStatus::Compliant,
198            audit_trail: Vec::new(),
199        })
200    }
201
202    /// Check compliance
203    pub fn check_compliance(
204        &mut self,
205        compliance_type: ComplianceType,
206    ) -> Result<MedicalOperationResult<ComplianceReport>, MedicalError> {
207        let start_time = std::time::Instant::now();
208
209        // Check compliance
210        let report = self.compliance_monitor.check_compliance(compliance_type)?;
211
212        let execution_time = start_time.elapsed().as_millis() as u64;
213
214        Ok(MedicalOperationResult {
215            result: report,
216            execution_time,
217            privacy_score: None,
218            compliance_status: ComplianceStatus::Compliant,
219            audit_trail: Vec::new(),
220        })
221    }
222
223    /// Get performance statistics
224    pub fn get_performance_stats(&self) -> MedicalPerformanceMetrics {
225        self.patient_manager.get_performance_metrics()
226    }
227
228    /// List all patients
229    pub fn list_patients(&self) -> Vec<String> {
230        self.patient_manager.list_patients()
231    }
232
233    /// Get patient information
234    pub fn get_patient_info(&self, patient_id: &str) -> Option<Patient> {
235        self.patient_manager.get_patient(patient_id).ok()
236    }
237}