diff --git a/src/tags.rs b/src/tags.rs index 4b0fd9d..fbab615 100644 --- a/src/tags.rs +++ b/src/tags.rs @@ -1 +1,12 @@ -// implemented in a later task +use crate::model::{IcdMeta, Tags}; + +/// Build display/filter Tags from ICD metadata and the Alpha-ID +/// validity flag of the matched entry. +pub fn tags_for(m: &IcdMeta, alpha_valid: bool) -> Tags { + Tags { + billable: m.para295 == "P", + valid: alpha_valid, + chapter: m.chapter.clone(), + exotic: m.exotic, + } +} diff --git a/tests/tags_tests.rs b/tests/tags_tests.rs new file mode 100644 index 0000000..cdde1d8 --- /dev/null +++ b/tests/tags_tests.rs @@ -0,0 +1,20 @@ +use alpha_id::model::IcdMeta; +use alpha_id::tags::tags_for; + +#[test] +fn billable_when_para295_is_p_and_valid() { + let mut m = IcdMeta::default(); + m.para295 = "P".into(); + m.chapter = "01".into(); + let t = tags_for(&m, true); + assert!(t.billable); + assert!(t.valid); + assert_eq!(t.chapter, "01"); +} + +#[test] +fn not_billable_when_para295_is_v() { + let mut m = IcdMeta::default(); + m.para295 = "V".into(); + assert!(!tags_for(&m, true).billable); +}