From 58026f11d0dd4ef0cb8bacaa70fa53d1766023c3 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Wed, 12 Jun 2024 16:48:58 +0200 Subject: [PATCH] feat: extract ICD10 code --- src/lkrexport.rs | 32 +++++++++++++++++++++++++++++++- testdaten/testdaten_1.xml | 2 +- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/lkrexport.rs b/src/lkrexport.rs index ad187d4..27e3e2b 100644 --- a/src/lkrexport.rs +++ b/src/lkrexport.rs @@ -93,6 +93,7 @@ impl FromStr for Meldung { } } +#[allow(unused)] impl Meldung { pub fn id(&self) -> Option { let re = Regex::new(r#"Meldung_ID="(?(.*?))""#).unwrap(); @@ -105,7 +106,18 @@ impl Meldung { None } - #[allow(unused)] + pub fn icd10(&self) -> Option { + let re = Regex::new(r"(?s)(?(.*?))") + .unwrap(); + + if re.is_match(&self.raw_value) { + let caps = re.captures(&self.raw_value).unwrap(); + return Some(caps["icd10"].to_string()); + } + + None + } + pub fn database_id(&self) -> Option { match self.id() { Some(id) => to_database_id(&id), @@ -174,4 +186,22 @@ mod tests { Some("1727824".to_string()) ); } + + #[test] + fn should_get_meldung_icd10() { + let actual = LkrExportProtocolFile::parse(include_str!("../testdaten/testdaten_1.xml")); + + assert!(actual.is_ok()); + + let patients = actual.unwrap().patients; + + assert_eq!( + patients[0].meldungen()[0].icd10(), + Some("C17.1".to_string()) + ); + assert_eq!( + patients[1].meldungen()[0].icd10(), + Some("C17.2".to_string()) + ); + } } diff --git a/testdaten/testdaten_1.xml b/testdaten/testdaten_1.xml index 43976bf..3b01820 100644 --- a/testdaten/testdaten_1.xml +++ b/testdaten/testdaten_1.xml @@ -31,7 +31,7 @@ I statusaenderung - C17.2 + C17.1 10 2015 GM 10.06.2024 T