From af44351f09de72b4ceb2c6d35ebcee5266ffb83e Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Wed, 22 May 2024 16:09:45 +0200 Subject: [PATCH] feat: enable messages with 'histologie_zytologie' using optional flag --- README.md | 23 ++++++++++++++--------- src/cli.rs | 15 +++++++++++++++ src/database.rs | 16 ++++++++++++++-- src/main.rs | 6 ++++++ src/resources/export.sql | 2 +- src/resources/query.sql | 2 +- 6 files changed, 51 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 09424cd..0a2bb8a 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,8 @@ flowchart LR Die Anwendung gibt für die möglichen Quellen der Kennzahlen die Anzahl der _Conditions_, gruppiert nach ICD-10 Gruppen, aus. -Unterstützt wird eien OPAL-CSV-Datei (wie für BZKF vorgesehen) und eine Onkostar-Datenbank, basierend auf MariaDB oder MySQL. +Unterstützt wird eien OPAL-CSV-Datei (wie für BZKF vorgesehen) und eine Onkostar-Datenbank, basierend auf MariaDB oder +MySQL. ![Ausgabe](docs/screenshot.png) @@ -39,8 +40,8 @@ Die Anwendung gibt nun eine Liste der ICD-10-Gruppen mit Anzahl der _Conditions_ ## Kennzahlen aus der Onkostar-Datenbank -Die Anzahl der _Conditions_, gruppiert nach ICD-10-Gruppe, kann auch mit dem Befehl `database` aus der Onkostar-Datenbank -abgerufen werden. +Die Anzahl der _Conditions_, gruppiert nach ICD-10-Gruppe, kann auch mit dem Befehl `database` aus der +Onkostar-Datenbank abgerufen werden. ``` bzkf-rwdp-check database --user me --year 2024 @@ -64,8 +65,11 @@ Der zusätzliche Parameter `--ignore-exports-since` ist optional. Wird er angegeben, werden keine Einträge mit Exportdatum ab diesem Datum verwendet. Dies eignet sich um nachträglich Zahlen zu einem bestimmten Datum zu ermitteln. -Der Parameter `--include-extern` schließt Meldungen mit externer Diagnosestellung ein. -Diese sind normalerweise nicht enthalten. +Der optionale Parameter `--include-extern` schließt Meldungen mit externer Diagnosestellung ein. +Diese sind normalerweise nicht enthalten. + +Der optionale Parameter `--include-histo-zyto` schließt Meldungen mit Meldeanlass `histologhie_zytologie` ein. +Diese sind normalerweise ebenfalls nicht enthalten. ## Export aus der Onkostar-Datenbank @@ -78,8 +82,9 @@ Die Anwendung ist in der Lage, mit dem Befehl `export` die Spalten in eine CSV-Datei zum Abgleich mit der OPAL-CSV-Datei zu exportieren. -Hierbei gelten die gleichen Datenbank-Parameter wie unter [Kennzahlen aus der Onkostar-Datenbank](#kennzahlen-aus-der-onkostar-datenbank), -zusätzlich gibt es noch die folgenden Parameter: +Hierbei gelten die gleichen Datenbank-Parameter wie +unter [Kennzahlen aus der Onkostar-Datenbank](#kennzahlen-aus-der-onkostar-datenbank), zusätzlich gibt es noch die +folgenden Parameter: ``` Options: @@ -92,5 +97,5 @@ Options: Die Anwendung kann auch die Conditions in der CSV-Datei mit der Onkostar-Datenbank direkt vergleichen. -Hierzu kann der Befehl `compare` genutzt werden. Dieser verwendet alle Optionen für die Datenbank und die Option `--file` -für die CSV-Datei und gibt eine Übersicht auf der Konsole aus. \ No newline at end of file +Hierzu kann der Befehl `compare` genutzt werden. Dieser verwendet alle Optionen für die Datenbank und die +Option `--file` für die CSV-Datei und gibt eine Übersicht auf der Konsole aus. \ No newline at end of file diff --git a/src/cli.rs b/src/cli.rs index 5bcbc6e..09cbe35 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -63,6 +63,11 @@ pub enum SubCommand { ignore_exports_since: Option, #[arg(long, help = "Meldungen mit externer Diagnose einschließen")] include_extern: bool, + #[arg( + long, + help = "Meldungen mit Meldeanlass 'histologie_zytologie' einschließen" + )] + include_histo_zyto: bool, }, #[command( about = "Erstellt eine (reduzierte) CSV-Datei zum direkten Vergleich mit der OPAL-CSV-Datei" @@ -99,6 +104,11 @@ pub enum SubCommand { xls_csv: bool, #[arg(long, help = "Meldungen mit externer Diagnose einschließen")] include_extern: bool, + #[arg( + long, + help = "Meldungen mit Meldeanlass 'histologie_zytologie' einschließen" + )] + include_histo_zyto: bool, }, #[command(about = "Abgleich zwischen CSV-Datei für OPAL und Onkostar-Datenbank")] Compare { @@ -131,6 +141,11 @@ pub enum SubCommand { ignore_exports_since: Option, #[arg(long, help = "Meldungen mit externer Diagnose einschließen")] include_extern: bool, + #[arg( + long, + help = "Meldungen mit Meldeanlass 'histologie_zytologie' einschließen" + )] + include_histo_zyto: bool, }, } diff --git a/src/database.rs b/src/database.rs index a338ac7..6ab88e0 100644 --- a/src/database.rs +++ b/src/database.rs @@ -40,13 +40,19 @@ impl DatabaseSource { year: &str, ignore_exports_since: &str, include_extern: bool, + include_histo_zyto: bool, ) -> Result, ()> { match Pool::new(self.0.as_str()) { Ok(pool) => { if let Ok(mut connection) = pool.try_get_conn(Duration::from_secs(3)) { return match connection.exec_map( SQL_QUERY, - params! {"year" => year, "ignore_exports_since" => ignore_exports_since, "include_extern" => if include_extern { 1 } else { 0 } }, + params! { + "year" => year, + "ignore_exports_since" => ignore_exports_since, + "include_extern" => if include_extern { 1 } else { 0 }, + "include_histo_zyto" => if include_histo_zyto { 1 } else { 0 } + }, |(icd10_group, count)| Icd10GroupSize { name: icd10_group, size: count, @@ -71,13 +77,19 @@ impl DatabaseSource { ignore_exports_since: &str, use_pat_id: bool, include_extern: bool, + include_histo_zyto: bool, ) -> Result, ()> { match Pool::new(self.0.as_str()) { Ok(pool) => { if let Ok(mut connection) = pool.try_get_conn(Duration::from_secs(3)) { return match connection.exec_map( EXPORT_QUERY, - params! {"year" => year, "ignore_exports_since" => ignore_exports_since, "include_extern" => if include_extern { 1 } else { 0 } }, + params! { + "year" => year, + "ignore_exports_since" => ignore_exports_since, + "include_extern" => if include_extern { 1 } else { 0 }, + "include_histo_zyto" => if include_histo_zyto { 1 } else { 0 } + }, |(condition_id, icd_10_code, diagnosis_date, pat_id)| ExportData { condition_id, icd_10_code, diff --git a/src/main.rs b/src/main.rs index baa605f..ad4e249 100644 --- a/src/main.rs +++ b/src/main.rs @@ -120,6 +120,7 @@ fn main() -> Result<(), Box> { year, ignore_exports_since, include_extern, + include_histo_zyto, } => { let password = request_password_if_none(password); let year = sanitize_year(year); @@ -136,6 +137,7 @@ fn main() -> Result<(), Box> { &year, &ignore_exports_since.unwrap_or("9999-12-31".into()), include_extern, + include_histo_zyto, ) .map_err(|_e| "Fehler bei Zugriff auf die Datenbank")?; @@ -156,6 +158,7 @@ fn main() -> Result<(), Box> { ignore_exports_since, xls_csv, include_extern, + include_histo_zyto, } => { let password = request_password_if_none(password); let year = sanitize_year(year); @@ -173,6 +176,7 @@ fn main() -> Result<(), Box> { &ignore_exports_since.unwrap_or("9999-12-31".into()), pat_id, include_extern, + include_histo_zyto, ) .map_err(|_e| "Fehler bei Zugriff auf die Datenbank")?; @@ -215,6 +219,7 @@ fn main() -> Result<(), Box> { year, ignore_exports_since, include_extern, + include_histo_zyto, } => { let password = request_password_if_none(password); let year = sanitize_year(year); @@ -232,6 +237,7 @@ fn main() -> Result<(), Box> { &ignore_exports_since.unwrap_or("9999-12-31".into()), pat_id, include_extern, + include_histo_zyto, ) .map_err(|_e| "Fehler bei Zugriff auf die Datenbank")?; diff --git a/src/resources/export.sql b/src/resources/export.sql index 8f5d283..35cceb3 100644 --- a/src/resources/export.sql +++ b/src/resources/export.sql @@ -37,7 +37,7 @@ FROM ( WHERE lm.xml_daten LIKE '%ICD_Version%' AND SUBSTRING_INDEX(SUBSTRING_INDEX(EXTRACTVALUE(lm.xml_daten, '//Diagnosedatum'), ' ', 1), '.', -1) = :year AND (lm.xml_daten LIKE '%%' OR lm.xml_daten LIKE '%%') - AND (lm.xml_daten NOT LIKE '%histologie_zytologie%') + AND (lm.xml_daten NOT LIKE '%histologie_zytologie%' OR 1 = :include_histo_zyto) ) o1 LEFT OUTER JOIN ( diff --git a/src/resources/query.sql b/src/resources/query.sql index 29e0cf7..1f614e3 100644 --- a/src/resources/query.sql +++ b/src/resources/query.sql @@ -122,7 +122,7 @@ FROM ( WHERE lme.xml_daten LIKE '%ICD_Version%' AND SUBSTRING_INDEX(SUBSTRING_INDEX(EXTRACTVALUE(lm.xml_daten, '//Diagnosedatum'), ' ', 1), '.', -1) = :year AND (lm.xml_daten LIKE '%%' OR lm.xml_daten LIKE '%%') - AND (lm.xml_daten NOT LIKE '%histologie_zytologie%') + AND (lm.xml_daten NOT LIKE '%histologie_zytologie%' OR 1 = :include_histo_zyto) ) o1 LEFT OUTER JOIN (