use serde::{Deserialize, Serialize};
use crate::TherapeuticArea;
use crate::biomarker::Biomarker;
use crate::epidemiology::Epidemiology;
use crate::id::DiseaseId;
use crate::safety_burden::SafetyBurden;
use crate::treatment::TreatmentLine;
use crate::unmet_need::UnmetNeed;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Disease {
pub id: DiseaseId,
pub name: String,
pub icd10_codes: Vec<String>,
pub therapeutic_area: TherapeuticArea,
pub epidemiology: Epidemiology,
pub standard_of_care: Vec<TreatmentLine>,
pub unmet_needs: Vec<UnmetNeed>,
pub safety_burden: SafetyBurden,
pub biomarkers: Vec<Biomarker>,
}
impl Disease {
pub fn drug_class_count(&self) -> usize {
self.standard_of_care
.iter()
.flat_map(|line| &line.drug_classes)
.collect::<std::collections::HashSet<_>>()
.len()
}
pub fn critical_need_count(&self) -> usize {
self.unmet_needs
.iter()
.filter(|n| matches!(n.severity, crate::unmet_need::NeedSeverity::Critical))
.count()
}
}