1
0
mirror of https://github.com/pcvolkmer/osc-variant.git synced 2025-04-19 11:46:50 +00:00

Initial import

This commit is contained in:
Paul-Christian Volkmer 2023-06-01 19:31:36 +02:00
commit 193b01dc92
12 changed files with 1536 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
.idea/*
/target
*.iml

154
Cargo.lock generated Normal file
View File

@ -0,0 +1,154 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "anstyle"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d"
[[package]]
name = "bitflags"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "clap"
version = "4.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93aae7a4192245f70fe75dd9157fc7b4a5bf53e88d30bd4396f7d8f9284d5acc"
dependencies = [
"clap_builder",
"clap_derive",
"once_cell",
]
[[package]]
name = "clap_builder"
version = "4.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4f423e341edefb78c9caba2d9c7f7687d0e72e89df3ce3394554754393ac3990"
dependencies = [
"anstyle",
"bitflags",
"clap_lex",
]
[[package]]
name = "clap_derive"
version = "4.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "191d9573962933b4027f932c600cd252ce27a8ad5979418fe78e43c07996f27b"
dependencies = [
"heck",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "clap_lex"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
[[package]]
name = "heck"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]]
name = "memchr"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
[[package]]
name = "once_cell"
version = "1.17.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9670a07f94779e00908f3e686eab508878ebb390ba6e604d3a284c00e8d0487b"
[[package]]
name = "osc-variant"
version = "0.1.0"
dependencies = [
"clap",
"quick-xml",
"serde",
"xml-rs",
]
[[package]]
name = "proc-macro2"
version = "1.0.59"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quick-xml"
version = "0.28.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1"
dependencies = [
"memchr",
"serde",
]
[[package]]
name = "quote"
version = "1.0.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"
dependencies = [
"proc-macro2",
]
[[package]]
name = "serde"
version = "1.0.163"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.163"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "syn"
version = "2.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "unicode-ident"
version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
[[package]]
name = "xml-rs"
version = "0.8.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2d8f380ae16a37b30e6a2cf67040608071384b1450c189e61bea3ff57cde922d"

12
Cargo.toml Normal file
View File

@ -0,0 +1,12 @@
[package]
name = "osc-variant"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
clap = { version = "4.3", features = ["std", "help", "usage", "derive", "error-context" ], default-features = false }
serde = { version = "1.0", features = ["derive"] }
quick-xml = { version = "0.28", features = ["escape-html", "serialize"], default-features=false }
xml-rs = "0.8"

21
LICENSE.txt Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 Comprehensive Cancer Center Mainfranken
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

11
README.md Normal file
View File

@ -0,0 +1,11 @@
= OSC-Variant
Anwendung zum Anpassen einer OSC-Datei an einen Standort.
== Funktion
Diese Anwendung passt eine OSC-Datei so an, dass (standortbezogene) Formularvarianten für Formularverweise
verwendet werden.
Hierzu wird die Datei deserialisiert, die entsprechenden Formularfelder ermittelt und die Formularvariante
sowie die Anzeige anhand eines Profils angepasst.

91
src/main.rs Normal file
View File

@ -0,0 +1,91 @@
/*
* MIT License
*
* Copyright (c) 2023 Comprehensive Cancer Center Mainfranken
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
use std::fs;
use std::fs::OpenOptions;
use std::io::Write;
use std::ops::Add;
use clap::Parser;
use quick_xml::de::from_str;
use quick_xml::se::Serializer;
use serde::Serialize;
use crate::model::onkostar_editor::OnkostarEditor;
mod model;
#[derive(Parser)]
#[command(author, version, about, long_about = None)]
#[command(propagate_version = true, arg_required_else_help(true))]
struct Cli {
#[arg(
long = "input",
help = "Eingabedatei"
)]
input: String,
#[arg(
long = "output",
help = "Ausgabedatei (Optional)"
)]
output: Option<String>
}
fn main() {
let cli = Cli::parse();
let contents = fs::read_to_string(cli.input)
.expect("Should have been able to read the file");
let xml: OnkostarEditor = from_str(contents.as_str()).unwrap();
let mut buf = String::new();
let mut serializier = Serializer::new(&mut buf);
serializier.indent(' ', 2);
xml.serialize(serializier).expect("Generated XML");
let output = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n".to_string()
.add(buf
// Replace &apos; and &quot; as used in original file
.replace("&apos;", "'")
.replace("&quot;", "\"")
.as_str());
match cli.output {
Some(filename) => {
let mut file = OpenOptions::new()
.read(false)
.write(true)
.create(true)
.truncate(true)
.open(filename).unwrap();
file.write_all(output.as_bytes()).expect("Should have written output file");
},
None => {
println!("{}", output)
}
}
}

136
src/model/data_catalogue.rs Normal file
View File

@ -0,0 +1,136 @@
/*
* MIT License
*
* Copyright (c) 2023 Comprehensive Cancer Center Mainfranken
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
use serde::{Deserialize, Serialize};
use crate::model::onkostar_editor::Ordner;
#[derive(Serialize, Deserialize, Debug)]
pub struct DataCatalogue {
#[serde(rename = "Name")]
name: String,
#[serde(rename = "NameExport")]
name_export: String,
#[serde(rename = "Category")]
category: String,
#[serde(rename = "Description")]
description: String,
#[serde(rename = "Note")]
note: String,
#[serde(rename = "Readonly")]
readonly: bool,
#[serde(rename = "BestOf")]
best_of: bool,
#[serde(rename = "SID")]
sid: String,
#[serde(rename = "GUID")]
guid: String,
#[serde(rename = "Revision")]
revision: u16,
#[serde(rename = "Entries")]
entries: Entries,
#[serde(rename = "Ordner")]
ordner: Ordner
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Entries {
#[serde(rename = "Entry")]
entry: Vec<Entry>
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Entry {
#[serde(rename = "PropertyCatalogue")]
#[serde(skip_serializing_if="Option::is_none")]
property_catalogue: Option<String>,
#[serde(rename = "Name")]
name: String,
#[serde(rename = "NameExport")]
name_export: String,
#[serde(rename = "Description")]
description: String,
#[serde(rename = "Type")]
entry_type: String,
#[serde(rename = "SubTable")]
sub_table: String,
#[serde(rename = "ScaleUnit")]
scale_unit: String,
#[serde(rename = "MaxLength")]
max_length: u32,
#[serde(rename = "DefaultValue")]
default_value: String,
#[serde(rename = "Active")]
active: bool,
#[serde(rename = "Readonly")]
read_only: bool,
#[serde(rename = "Filterable")]
filterable: bool,
#[serde(rename = "RangeFrom")]
#[serde(skip_serializing_if="Option::is_none")]
range_from: Option<String>,
#[serde(rename = "RangeUntil")]
#[serde(skip_serializing_if="Option::is_none")]
range_until: Option<String>,
#[serde(rename = "MultipleChoice")]
multiple_choice: bool,
#[serde(rename = "Position")]
position: String,
#[serde(rename = "Note")]
note: String,
#[serde(rename = "DateEstimatedAllowed")]
date_estimated_allowed: bool,
#[serde(rename = "DateUnknownAllowed")]
date_unknown_allowed: bool,
#[serde(rename = "oeChoiceOptions")]
oe_choice_options: String,
#[serde(rename = "Fachabteilungsbezug")]
fachabteilungsbezug: bool,
#[serde(rename = "Use")]
#[serde(skip_serializing_if="Option::is_none")]
use_: Option<Use>,
#[serde(rename = "FesteNachkommastellen")]
#[serde(skip_serializing_if="Option::is_none")]
feste_nachkommastellen: Option<u16>,
#[serde(rename = "SID")]
sid: String,
#[serde(rename = "GUID")]
guid: String,
#[serde(rename = "Revision")]
revision: u16,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Use {
#[serde(rename = "ProgramModule", default)]
program_module: Vec<ProgramModule>
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ProgramModule {
#[serde(rename="@program")]
program: String,
#[serde(rename="@name")]
name: String
}

343
src/model/data_form.rs Normal file
View File

@ -0,0 +1,343 @@
/*
* MIT License
*
* Copyright (c) 2023 Comprehensive Cancer Center Mainfranken
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
use serde::{Deserialize, Serialize};
use crate::model::{Ansichten, Entries, Filter, MenuCategory, PlausibilityRules, Script};
use crate::model::onkostar_editor::Ordner;
#[derive(Serialize, Deserialize, Debug)]
pub struct DataForm {
#[serde(rename = "DataCatalogues")]
data_catalogues: DataCatalogues,
#[serde(rename = "Category")]
category: String,
#[serde(rename = "Name")]
name: String,
#[serde(rename = "Version")]
version: String,
#[serde(rename = "MenuEntry")]
menu_entry: String,
#[serde(rename = "Title")]
title: String,
#[serde(rename = "Description")]
description: String,
#[serde(rename = "Note")]
note: String,
#[serde(rename = "Readonly")]
readonly: bool,
#[serde(rename = "Active")]
active: bool,
#[serde(rename = "TudokPosition")]
tudok_position: String,
#[serde(rename = "Aktenbereich")]
aktenbereich: String,
#[serde(rename = "BefragungRelevant")]
befragung_relevant: bool,
#[serde(rename = "Hotkey")]
#[serde(skip_serializing_if="Option::is_none")]
hotkey: Option<String>,
#[serde(rename = "Summary")]
summary: String,
#[serde(rename = "BigSummary")]
big_summary: String,
#[serde(rename = "KalenderSchnipsel")]
kalender_schnipsel: String,
#[serde(rename = "EmailTemplate")]
#[serde(skip_serializing_if="Option::is_none")]
mail_template: Option<String>,
#[serde(rename = "ErkrankungText")]
erkrankung_text: String,
#[serde(rename = "ErkrankungTextLong")]
erkrankung_text_long: String,
#[serde(rename = "ErkrankungProzedurText")]
erkrankung_prozedur_text: String,
#[serde(rename = "ErkrankungSummary")]
erkrankung_summary: String,
#[serde(rename = "ErkrankungBigSummary")]
erkrankung_big_summary: String,
#[serde(rename = "Kontext")]
kontext: String,
#[serde(rename = "TudokReadonly")]
tudok_readonly: bool,
#[serde(rename = "VitalstatusRelevant")]
vitalstatus_relevant: bool,
#[serde(rename = "AutoNummerierung")]
auto_nummerierung: bool,
#[serde(rename = "Zwischenspeichern")]
zwischenspeichern: bool,
#[serde(rename = "Zurueckblaettern")]
zurueckblaettern: bool,
#[serde(rename = "Datenbankexport")]
datenbankexport: bool,
#[serde(rename = "DatenschutzRelevant")]
datenschutz_relevant: bool,
#[serde(rename = "KonferenzRelevant")]
konferenz_relevant: bool,
#[serde(rename = "hatUnterformulare")]
hat_unterformulare: bool,
#[serde(rename = "ScriptBeimSchliessen")]
#[serde(skip_serializing_if="Option::is_none")]
script_beim_schliessen: Option<Script>,
#[serde(rename = "ScriptBeimSpeichern")]
#[serde(skip_serializing_if="Option::is_none")]
script_beim_speichern: Option<Script>,
#[serde(rename = "ScriptBeimNeuanlegen")]
#[serde(skip_serializing_if="Option::is_none")]
script_beim_neuanlegen: Option<Script>,
#[serde(rename = "ScriptBeimBearbeiten")]
#[serde(skip_serializing_if="Option::is_none")]
script_beim_bearbeiten: Option<Script>,
#[serde(rename = "ScriptBeimKopieren")]
#[serde(skip_serializing_if="Option::is_none")]
script_beim_kopieren: Option<Script>,
#[serde(rename = "ScriptBeimImport")]
#[serde(skip_serializing_if="Option::is_none")]
script_beim_import: Option<Script>,
#[serde(rename = "ScriptBeimAnonymisieren")]
#[serde(skip_serializing_if="Option::is_none")]
script_beim_anonymisieren: Option<Script>,
#[serde(rename = "SID")]
sid: String,
#[serde(rename = "GUID")]
guid: String,
#[serde(rename = "Revision")]
revision: u16,
#[serde(rename = "SeitenzahlSichtbar")]
seitenanzahl_sichtbar: bool,
#[serde(rename = "Entries")]
entries: Entries<Entry>,
#[serde(rename = "PlausibilityRules")]
plausibility_rules: PlausibilityRules<DataFormEntries>,
#[serde(rename = "Haeufigkeiten")]
haeufigkeiten: String,
#[serde(rename = "Kennzahlen")]
kennzahlen: String,
#[serde(rename = "Ordner")]
ordner: Ordner,
#[serde(rename = "MenuCategory")]
#[serde(skip_serializing_if="Option::is_none")]
menu_category: Option<MenuCategory>,
#[serde(rename = "Ansichten")]
#[serde(skip_serializing_if="Option::is_none")]
ansichten: Option<Ansichten>
}
#[derive(Serialize, Deserialize, Debug)]
pub struct DataCatalogues {
#[serde(rename = "DataCatalogue")]
data_catalogue: Vec<String>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Entry {
#[serde(rename="@parentId")]
#[serde(skip_serializing_if="Option::is_none")]
parent_id: Option<u32>,
#[serde(rename="@parentRefId")]
#[serde(skip_serializing_if="Option::is_none")]
parent_ref_id: Option<u32>,
#[serde(rename = "Type")]
type_: String,
#[serde(rename = "Name")]
name: String,
#[serde(rename = "Description")]
description: String,
#[serde(rename = "Active")]
active: bool,
#[serde(rename = "Readonly")]
read_only: bool,
#[serde(rename = "Printable")]
printable: bool,
#[serde(rename = "Position")]
position: String,
#[serde(rename = "Note")]
note: String,
#[serde(rename = "Beschriftung1")]
#[serde(skip_serializing_if="Option::is_none")]
beschriftung1: Option<String>,
#[serde(rename = "Beschriftung2")]
#[serde(skip_serializing_if="Option::is_none")]
beschriftung2: Option<String>,
#[serde(rename = "WertAnzeigenPatmodul")]
#[serde(skip_serializing_if="Option::is_none")]
wert_anzeigen_patmodul: Option<String>,
#[serde(rename = "MultipleChoice")]
multiple_choice: bool,
#[serde(rename = "DefaultValue")]
default_value: String,
#[serde(rename = "Alignment")]
alignment: String,
#[serde(rename = "Direction")]
direction: String,
#[serde(rename = "DataCatalogueEntry")]
data_catalogue_entry: String,
#[serde(rename = "DataCatalogueEntryTable")]
#[serde(skip_serializing_if="Option::is_none")]
data_catalogue_entry_table: Option<String>,
#[serde(rename = "ElementParent")]
element_parent: String,
#[serde(rename = "ProcedureDateStatus")]
procedure_date_status: String,
#[serde(rename = "ZuordnungErkrankung")]
zuordnung_erkrankung: String,
#[serde(rename = "Grafik")]
#[serde(skip_serializing_if="Option::is_none")]
grafik: Option<String>,
#[serde(rename = "GrafikAusrichtung")]
#[serde(skip_serializing_if="Option::is_none")]
grafik_ausrichtung: Option<String>,
#[serde(rename = "Mandatory")]
mandatory: String,
#[serde(rename = "Filter")]
#[serde(skip_serializing_if="Option::is_none")]
filter: Option<Filter>,
#[serde(rename = "NotSpecified")]
not_specified: bool,
#[serde(rename = "Scripts")]
#[serde(skip_serializing_if="Option::is_none")]
scripts: Option<Script>,
#[serde(rename = "ReferencedDataForm")]
#[serde(skip_serializing_if="Option::is_none")]
referenced_data_form: Option<String>,
#[serde(rename = "ReferencedDataFormField")]
#[serde(skip_serializing_if="Option::is_none")]
referenced_data_form_field: Option<String>,
#[serde(rename = "Anzeige")]
anzeige: String,
#[serde(rename = "AnzeigeAuswahl")]
#[serde(skip_serializing_if="Option::is_none")]
anzeige_auswahl: Option<String>,
#[serde(rename = "VersionFrom")]
#[serde(skip_serializing_if="Option::is_none")]
version_from: Option<String>,
#[serde(rename = "Speichern")]
speichern: String,
#[serde(rename = "LeerAusblenden")]
leer_ausblenden: bool,
#[serde(rename = "GeschlossenAnzeigen")]
geschlossen_anzeigen: bool,
#[serde(rename = "Min")]
min: u32,
#[serde(rename = "Max")]
max: u32,
#[serde(rename = "InUebersichtAnzeigen")]
in_uebersicht_anzeigen: bool,
#[serde(rename = "Hinweis")]
hinweis: String,
#[serde(rename = "Vorschlagskategorie")]
#[serde(skip_serializing_if="Option::is_none")]
vorschlagskategorie: Option<String>,
#[serde(rename = "CategoryFilterName")]
#[serde(skip_serializing_if="Option::is_none")]
category_filer_name: Option<String>,
#[serde(rename = "Platzhalter")]
#[serde(skip_serializing_if="Option::is_none")]
platzhalter: Option<String>,
#[serde(rename = "ShowAuspraegungen")]
show_auspraegungen: bool,
#[serde(rename = "ProzedurdatumUebernehmen")]
prozedurdatum_uebernehmen: bool,
#[serde(rename = "Vorschlaege")]
vorschlaege: bool,
#[serde(rename = "AnzeigeAuswahldialog")]
anzeige_auswahldialog: String,
#[serde(rename = "SucheAuswahldialog")]
suche_auswahldialog: String,
#[serde(rename = "InfoAuswahldialog")]
#[serde(skip_serializing_if="Option::is_none")]
info_auswahldialog: Option<String>,
#[serde(rename = "DiseaseCategoryFilter")]
#[serde(skip_serializing_if="Option::is_none")]
disease_category_filter: Option<String>,
#[serde(rename = "MindestbreiteLabel")]
#[serde(skip_serializing_if="Option::is_none")]
mindestbreite_label: Option<u16>,
#[serde(rename = "MindestbreiteFeld")]
#[serde(skip_serializing_if="Option::is_none")]
mindestbreite_feld: Option<u16>,
#[serde(rename = "OrganisationunitFilter")]
#[serde(skip_serializing_if="Option::is_none")]
ou_filter: Option<String>,
#[serde(rename = "Aktion")]
#[serde(skip_serializing_if="Option::is_none")]
aktion: Option<String>,
#[serde(rename = "Top10")]
#[serde(skip_serializing_if="Option::is_none")]
top10: Option<String>,
#[serde(rename = "GroesseTextfeld")]
groesse_textfeld: u16,
#[serde(rename = "FilterAufheben")]
filter_aufheben: bool,
#[serde(rename = "Resizable")]
resizable: bool,
#[serde(rename = "Verschluesselt")]
verschluesselt: bool,
#[serde(rename = "MemoWidth")]
#[serde(skip_serializing_if="Option::is_none")]
memo_width: Option<u32>,
#[serde(rename = "MemoArt")]
#[serde(skip_serializing_if="Option::is_none")]
memo_art: Option<String>,
#[serde(rename = "DateValidFrom")]
date_valid_from: String,
#[serde(rename = "DateValidTo")]
date_valid_to: String,
#[serde(rename = "DateValidFuture")]
date_valid_future: bool,
#[serde(rename = "Titel")]
#[serde(skip_serializing_if="Option::is_none")]
titel: Option<String>,
#[serde(rename = "InAuswertung")]
in_auswertung: bool,
#[serde(rename = "InAuswertungGraph")]
in_auswertung_graph: bool,
#[serde(rename = "AlignmentPatModul")]
alignment_pat_modul: String,
#[serde(rename = "DirectionPatModul")]
direction_pat_modul: String,
#[serde(rename = "SeitenumbruchPatModul")]
seitenumbruch_pat_modul: bool,
#[serde(rename = "MarkierungIgnorieren")]
markierung_ignorieren: bool,
#[serde(rename = "SucheArt")]
#[serde(skip_serializing_if="Option::is_none")]
suche_art: Option<String>,
#[serde(rename = "SID")]
sid: String,
#[serde(rename = "GUID")]
guid: String,
#[serde(rename = "Revision")]
revision: u16,
#[serde(rename = "vorherigeWerte")]
vorherige_werte: String,
#[serde(rename = "EinfuegenVerhindern")]
einfuegen_verhindern: String,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct DataFormEntries {
#[serde(rename = "EntryName")]
entry_name: Option<Vec<String>>
}

142
src/model/mod.rs Normal file
View File

@ -0,0 +1,142 @@
/*
* MIT License
*
* Copyright (c) 2023 Comprehensive Cancer Center Mainfranken
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
use serde::{Deserialize, Serialize};
pub mod onkostar_editor;
pub mod property_catalogue;
pub mod data_catalogue;
pub mod data_form;
pub mod unterformular;
#[derive(Serialize, Deserialize, Debug)]
pub struct Script {
#[serde(rename = "Code")]
code: String,
#[serde(rename = "Valid")]
valid: bool
}
#[derive(Serialize, Deserialize, Debug)]
pub struct PlausibilityRule<T> {
#[serde(rename = "Type")]
type_: String,
#[serde(rename = "Message")]
message: String,
#[serde(rename = "Description")]
description: String,
#[serde(rename = "Bezeichnung")]
bezeichnung: String,
#[serde(rename = "Formula")]
formula: String,
#[serde(rename = "Active")]
active: bool,
#[serde(rename = "Editable")]
editable: bool,
#[serde(rename = "Valid")]
valid: bool,
#[serde(rename = "Condition")]
#[serde(skip_serializing_if="Option::is_none")]
condition: Option<String>,
#[serde(rename = "ConditionValid")]
#[serde(skip_serializing_if="Option::is_none")]
condition_valid: Option<bool>,
#[serde(rename = "Statusauswirkung")]
statusauswirkung: String,
#[serde(rename = "DataFormEntries")]
data_form_entries: T,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Entries<T> {
#[serde(rename = "Entry")]
entry: Vec<T>
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Ansicht {
#[serde(rename = "Name")]
name: String,
#[serde(rename = "Beschreibung")]
beschreibung: String,
#[serde(rename = "Konfiguration")]
konfiguration: String,
#[serde(rename = "DataForm")]
data_form: String,
#[serde(rename = "DataCatalogue")]
data_catalogue: String,
#[serde(rename = "TypAuswahl")]
typ_auswahl: String,
#[serde(rename = "Suche")]
suche: bool,
#[serde(rename = "SID")]
sid: String,
#[serde(rename = "GUID")]
guid: String,
#[serde(rename = "Revision")]
revision: u16,
#[serde(rename = "InBibliothekAusliefern")]
in_bibliothek_ausliefern: bool,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Ansichten {
#[serde(rename = "Ansicht", default)]
program_module: Vec<Ansicht>
}
#[derive(Serialize, Deserialize, Debug)]
pub struct MenuCategory {
#[serde(rename = "name")]
name: String,
#[serde(rename = "position")]
position: String,
#[serde(rename = "column")]
column: String
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Filter {
#[serde(rename = "Condition")]
condition: String,
#[serde(rename = "Valid")]
valid: bool,
#[serde(rename = "RefEntries")]
#[serde(skip_serializing_if="Option::is_none")]
ref_entries: Option<RefEntries>
}
#[derive(Serialize, Deserialize, Debug)]
pub struct RefEntries {
#[serde(rename = "RefEntry")]
#[serde(skip_serializing_if="Option::is_none")]
ref_entry: Option<Vec<String>>
}
#[derive(Serialize, Deserialize, Debug)]
pub struct PlausibilityRules<T> {
#[serde(rename = "PlausibilityRule")]
#[serde(skip_serializing_if="Option::is_none")]
plausibility_rule: Option<Vec<PlausibilityRule<T>>>
}

View File

@ -0,0 +1,80 @@
/*
* MIT License
*
* 2023 Comprehensive Cancer Center Mainfranken
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
use serde::{Deserialize, Serialize};
use crate::model::data_catalogue::DataCatalogue;
use crate::model::data_form::DataForm;
use crate::model::property_catalogue::PropertyCatalogue;
use crate::model::unterformular::Unterformular;
#[derive(Serialize, Deserialize, Debug)]
pub struct OnkostarEditor {
#[serde(rename = "InfoXML")]
info_xml: InfoXML,
#[serde(rename = "Editor")]
editor: Editor
}
#[derive(Serialize, Deserialize, Debug)]
pub struct InfoXML {
#[serde(rename = "DatumXML")]
datum_xml: String,
#[serde(rename = "Name")]
name: String,
#[serde(rename = "Version")]
version: String
}
#[derive(Serialize, Deserialize, Debug)]
struct Editor {
#[serde(rename = "PropertyCatalogue")]
property_catalogue: Vec<PropertyCatalogue>,
#[serde(rename = "DataCatalogue")]
data_catalogue: Vec<DataCatalogue>,
#[serde(rename = "Unterformular")]
unterformular: Vec<Unterformular>,
#[serde(rename = "DataForm")]
data_form: Vec<DataForm>
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Ordner {
#[serde(rename = "Bibliothek")]
bibliothek: Bibliothek,
#[serde(rename = "Name")]
name: String,
#[serde(rename = "Typ")]
typ: String,
#[serde(rename = "ParentOrdner", default)]
#[serde(skip_serializing_if="Option::is_none")]
parent_order: Option<Box<Ordner>>
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Bibliothek {
#[serde(rename = "Name")]
name: String
}

View File

@ -0,0 +1,189 @@
/*
* MIT License
*
* Copyright (c) 2023 Comprehensive Cancer Center Mainfranken
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
use serde::{Deserialize, Serialize};
use crate::model::onkostar_editor::Ordner;
#[derive(Serialize, Deserialize, Debug)]
pub struct PropertyCatalogue {
#[serde(rename = "Name")]
name: String,
#[serde(rename = "Description")]
description: String,
#[serde(rename = "Standard")]
standard: String,
#[serde(rename = "Readonly")]
readonly: bool,
#[serde(rename = "Anmerkung")]
#[serde(skip_serializing_if="Option::is_none")]
anmerkung: Option<String>,
#[serde(rename = "SID")]
sid: String,
#[serde(rename = "GUID")]
guid: String,
#[serde(rename = "Revision")]
revision: u16,
#[serde(rename = "Versions")]
versions: Versions,
#[serde(rename = "Ordner")]
ordner: Ordner
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Versions {
#[serde(rename = "Version")]
#[serde(skip_serializing_if="Option::is_none")]
entry: Option<Vec<Version>>
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Version {
#[serde(rename = "VersionNumber")]
version_number: u16,
#[serde(rename = "ValidFrom")]
valid_from: String,
#[serde(rename = "OID")]
oid: String,
#[serde(rename = "Active")]
active: bool,
#[serde(rename = "Description")]
description: String,
#[serde(rename = "SID")]
sid: String,
#[serde(rename = "GUID")]
guid: String,
#[serde(rename = "Revision")]
revision: u16,
#[serde(rename = "Entries")]
entries: VersionEntries,
#[serde(rename = "Abbildung")]
#[serde(skip_serializing_if="Option::is_none")]
abbildung: Option<Vec<Abbildung>>,
#[serde(rename = "Categories")]
categories: Categories
}
#[derive(Serialize, Deserialize, Debug)]
pub struct VersionEntries {
#[serde(rename = "Entry", default)]
content: Vec<VersionEntry>
}
#[derive(Serialize, Deserialize, Debug)]
pub struct VersionEntry {
#[serde(rename = "Code")]
code: String,
#[serde(rename = "ShortDescription")]
short_description: String,
#[serde(rename = "Description")]
description: String,
#[serde(rename = "Synonyms", default)]
#[serde(skip_serializing_if="Option::is_none")]
synonyms: Option<String>,
#[serde(rename = "Note", default)]
#[serde(skip_serializing_if="Option::is_none")]
note: Option<String>,
#[serde(rename = "Position")]
position: String
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Categories {
#[serde(rename = "Category", default)]
content: Vec<Category>
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Category {
#[serde(rename = "Name")]
name: String,
#[serde(rename = "Position")]
position: String,
#[serde(rename = "Auswahldialog")]
auswahldialog: bool,
#[serde(rename = "EntryCount")]
entry_count: u16,
#[serde(rename = "Beschreibung")]
beschreibung: String,
#[serde(rename = "CategoryEntries")]
category_entries: CategoryEntries
}
#[derive(Serialize, Deserialize, Debug)]
pub struct CategoryEntries {
#[serde(rename = "CategoryEntry", default)]
content: Vec<CategoryEntry>
}
#[derive(Serialize, Deserialize, Debug)]
pub struct CategoryEntry {
#[serde(rename = "Code")]
code: String,
#[serde(rename = "shortdesc", default)]
#[serde(skip_serializing_if="Option::is_none")]
shortdesc: Option<String>,
#[serde(rename = "description", default)]
#[serde(skip_serializing_if="Option::is_none")]
description: Option<String>,
#[serde(rename = "Synonyms", default)]
#[serde(skip_serializing_if="Option::is_none")]
synonyms: Option<String>,
#[serde(rename = "note", default)]
#[serde(skip_serializing_if="Option::is_none")]
note: Option<String>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Abbildung {
#[serde(rename = "ZielMKVersionOid")]
ziel_mk_version_oid: String,
#[serde(rename = "Eintrag", default)]
content: Vec<AbbildungEintrag>
}
#[derive(Serialize, Deserialize, Debug)]
pub struct AbbildungEintrag {
#[serde(rename = "Entry-from")]
entry_from: AbbildungEntry,
#[serde(rename = "Entry-to")]
entry_to: AbbildungEntry
}
#[derive(Serialize, Deserialize, Debug)]
pub struct AbbildungEntry {
#[serde(rename = "Code")]
code: String,
#[serde(rename = "ShortDescription")]
short_description: String,
#[serde(rename = "Description")]
description: String,
#[serde(rename = "Synonyms")]
#[serde(skip_serializing_if="Option::is_none")]
synonyms: Option<String>,
#[serde(rename = "Note")]
note: String,
#[serde(rename = "Position")]
position: String
}

353
src/model/unterformular.rs Normal file
View File

@ -0,0 +1,353 @@
/*
* MIT License
*
* Copyright (c) 2023 Comprehensive Cancer Center Mainfranken
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
use serde::{Deserialize, Serialize};
use crate::model::{Ansichten, Entries, Filter, MenuCategory, PlausibilityRules, Script};
use crate::model::onkostar_editor::Ordner;
#[derive(Serialize, Deserialize, Debug)]
pub struct Unterformular {
#[serde(rename = "DataCatalogues")]
data_catalogues: DataCatalogues,
#[serde(rename = "Category")]
category: String,
#[serde(rename = "Name")]
name: String,
#[serde(rename = "Version")]
version: String,
#[serde(rename = "MenuEntry")]
menu_entry: String,
#[serde(rename = "Title")]
title: String,
#[serde(rename = "Description")]
description: String,
#[serde(rename = "Note")]
note: String,
#[serde(rename = "Readonly")]
readonly: bool,
#[serde(rename = "Active")]
active: bool,
#[serde(rename = "TudokPosition")]
tudok_position: String,
#[serde(rename = "Aktenbereich")]
aktenbereich: String,
#[serde(rename = "BefragungRelevant")]
befragung_relevant: bool,
#[serde(rename = "Hotkey")]
#[serde(skip_serializing_if="Option::is_none")]
hotkey: Option<String>,
#[serde(rename = "Summary")]
summary: String,
#[serde(rename = "BigSummary")]
big_summary: String,
#[serde(rename = "KalenderSchnipsel")]
kalender_schnipsel: String,
#[serde(rename = "EmailTemplate")]
#[serde(skip_serializing_if="Option::is_none")]
mail_template: Option<String>,
#[serde(rename = "ErkrankungText")]
#[serde(skip_serializing_if="Option::is_none")]
erkrankung_text: Option<String>,
#[serde(rename = "ErkrankungTextLong")]
#[serde(skip_serializing_if="Option::is_none")]
erkrankung_text_long: Option<String>,
#[serde(rename = "ErkrankungProzedurText")]
#[serde(skip_serializing_if="Option::is_none")]
erkrankung_prozedur_text: Option<String>,
#[serde(rename = "ErkrankungSummary")]
#[serde(skip_serializing_if="Option::is_none")]
erkrankung_summary: Option<String>,
#[serde(rename = "ErkrankungBigSummary")]
#[serde(skip_serializing_if="Option::is_none")]
erkrankung_big_summary: Option<String>,
#[serde(rename = "Kontext")]
kontext: String,
#[serde(rename = "TudokReadonly")]
tudok_readonly: bool,
#[serde(rename = "VitalstatusRelevant")]
vitalstatus_relevant: bool,
#[serde(rename = "AutoNummerierung")]
auto_nummerierung: bool,
#[serde(rename = "Zwischenspeichern")]
zwischenspeichern: bool,
#[serde(rename = "Zurueckblaettern")]
zurueckblaettern: bool,
#[serde(rename = "Datenbankexport")]
datenbankexport: bool,
#[serde(rename = "DatenschutzRelevant")]
datenschutz_relevant: bool,
#[serde(rename = "KonferenzRelevant")]
konferenz_relevant: bool,
#[serde(rename = "hatUnterformulare")]
hat_unterformulare: bool,
#[serde(rename = "ScriptBeimSchliessen")]
#[serde(skip_serializing_if="Option::is_none")]
script_beim_schliessen: Option<Script>,
#[serde(rename = "ScriptBeimSpeichern")]
#[serde(skip_serializing_if="Option::is_none")]
script_beim_speichern: Option<Script>,
#[serde(rename = "ScriptBeimNeuanlegen")]
#[serde(skip_serializing_if="Option::is_none")]
script_beim_neuanlegen: Option<Script>,
#[serde(rename = "ScriptBeimBearbeiten")]
#[serde(skip_serializing_if="Option::is_none")]
script_beim_bearbeiten: Option<Script>,
#[serde(rename = "ScriptBeimKopieren")]
#[serde(skip_serializing_if="Option::is_none")]
script_beim_kopieren: Option<Script>,
#[serde(rename = "ScriptBeimImport")]
#[serde(skip_serializing_if="Option::is_none")]
script_beim_import: Option<Script>,
#[serde(rename = "ScriptBeimAnonymisieren")]
#[serde(skip_serializing_if="Option::is_none")]
script_beim_anonymisieren: Option<Script>,
#[serde(rename = "SID")]
sid: String,
#[serde(rename = "GUID")]
guid: String,
#[serde(rename = "Revision")]
revision: u16,
#[serde(rename = "VerknuepftGUID")]
#[serde(skip_serializing_if="Option::is_none")]
verknuepft_guid: Option<String>,
#[serde(rename = "SeitenzahlSichtbar")]
seitenanzahl_sichtbar: bool,
#[serde(rename = "Entries")]
entries: Entries<Entry>,
#[serde(rename = "PlausibilityRules")]
plausibility_rules: PlausibilityRules<DataFormEntries>,
#[serde(rename = "Haeufigkeiten")]
haeufigkeiten: String,
#[serde(rename = "Kennzahlen")]
kennzahlen: String,
#[serde(rename = "Ordner")]
ordner: Ordner,
#[serde(rename = "MenuCategory")]
#[serde(skip_serializing_if="Option::is_none")]
menu_category: Option<MenuCategory>,
#[serde(rename = "Ansichten")]
#[serde(skip_serializing_if="Option::is_none")]
ansichten: Option<Ansichten>
}
#[derive(Serialize, Deserialize, Debug)]
pub struct DataCatalogues {
#[serde(rename = "DataCatalogue")]
data_catalogue: Vec<String>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Entry {
#[serde(rename="@parentId")]
#[serde(skip_serializing_if="Option::is_none")]
parent_id: Option<u32>,
#[serde(rename="@parentRefId")]
#[serde(skip_serializing_if="Option::is_none")]
parent_ref_id: Option<u32>,
#[serde(rename = "Type")]
type_: String,
#[serde(rename = "Name")]
name: String,
#[serde(rename = "Description")]
description: String,
#[serde(rename = "Active")]
active: bool,
#[serde(rename = "Readonly")]
read_only: bool,
#[serde(rename = "Printable")]
printable: bool,
#[serde(rename = "Position")]
position: String,
#[serde(rename = "Note")]
note: String,
#[serde(rename = "Beschriftung1")]
#[serde(skip_serializing_if="Option::is_none")]
beschriftung1: Option<String>,
#[serde(rename = "Beschriftung2")]
#[serde(skip_serializing_if="Option::is_none")]
beschriftung2: Option<String>,
#[serde(rename = "WertAnzeigenPatmodul")]
#[serde(skip_serializing_if="Option::is_none")]
wert_anzeigen_patmodul: Option<String>,
#[serde(rename = "MultipleChoice")]
multiple_choice: bool,
#[serde(rename = "DefaultValue")]
default_value: String,
#[serde(rename = "Alignment")]
alignment: String,
#[serde(rename = "Direction")]
direction: String,
#[serde(rename = "DataCatalogueEntry")]
data_catalogue_entry: String,
#[serde(rename = "DataCatalogueEntryTable")]
#[serde(skip_serializing_if="Option::is_none")]
data_catalogue_entry_table: Option<String>,
#[serde(rename = "ElementParent")]
element_parent: String,
#[serde(rename = "ProcedureDateStatus")]
procedure_date_status: String,
#[serde(rename = "ZuordnungErkrankung")]
zuordnung_erkrankung: String,
#[serde(rename = "Grafik")]
#[serde(skip_serializing_if="Option::is_none")]
grafik: Option<String>,
#[serde(rename = "GrafikAusrichtung")]
#[serde(skip_serializing_if="Option::is_none")]
grafik_ausrichtung: Option<String>,
#[serde(rename = "Mandatory")]
mandatory: String,
#[serde(rename = "Filter")]
#[serde(skip_serializing_if="Option::is_none")]
filter: Option<Filter>,
#[serde(rename = "NotSpecified")]
not_specified: bool,
#[serde(rename = "Scripts")]
#[serde(skip_serializing_if="Option::is_none")]
scripts: Option<Script>,
#[serde(rename = "ReferencedDataForm")]
#[serde(skip_serializing_if="Option::is_none")]
referenced_data_form: Option<String>,
#[serde(rename = "ReferencedDataFormField")]
#[serde(skip_serializing_if="Option::is_none")]
referenced_data_form_field: Option<String>,
#[serde(rename = "Anzeige")]
anzeige: String,
#[serde(rename = "AnzeigeAuswahl")]
#[serde(skip_serializing_if="Option::is_none")]
anzeige_auswahl: Option<String>,
#[serde(rename = "VersionFrom")]
#[serde(skip_serializing_if="Option::is_none")]
version_from: Option<String>,
#[serde(rename = "Speichern")]
speichern: String,
#[serde(rename = "LeerAusblenden")]
leer_ausblenden: bool,
#[serde(rename = "GeschlossenAnzeigen")]
geschlossen_anzeigen: bool,
#[serde(rename = "Min")]
min: u32,
#[serde(rename = "Max")]
max: u32,
#[serde(rename = "InUebersichtAnzeigen")]
in_uebersicht_anzeigen: bool,
#[serde(rename = "Hinweis")]
#[serde(skip_serializing_if="Option::is_none")]
hinweis: Option<String>,
#[serde(rename = "Vorschlagskategorie")]
#[serde(skip_serializing_if="Option::is_none")]
vorschlagskategorie: Option<String>,
#[serde(rename = "CategoryFilterName")]
#[serde(skip_serializing_if="Option::is_none")]
category_filer_name: Option<String>,
#[serde(rename = "Platzhalter")]
#[serde(skip_serializing_if="Option::is_none")]
platzhalter: Option<String>,
#[serde(rename = "ShowAuspraegungen")]
show_auspraegungen: bool,
#[serde(rename = "ProzedurdatumUebernehmen")]
prozedurdatum_uebernehmen: bool,
#[serde(rename = "Vorschlaege")]
vorschlaege: bool,
#[serde(rename = "AnzeigeAuswahldialog")]
anzeige_auswahldialog: String,
#[serde(rename = "SucheAuswahldialog")]
suche_auswahldialog: String,
#[serde(rename = "InfoAuswahldialog")]
#[serde(skip_serializing_if="Option::is_none")]
info_auswahldialog: Option<String>,
#[serde(rename = "DiseaseCategoryFilter")]
#[serde(skip_serializing_if="Option::is_none")]
disease_category_filter: Option<String>,
#[serde(rename = "MindestbreiteLabel")]
#[serde(skip_serializing_if="Option::is_none")]
mindestbreite_label: Option<u16>,
#[serde(rename = "MindestbreiteFeld")]
#[serde(skip_serializing_if="Option::is_none")]
mindestbreite_feld: Option<u16>,
#[serde(rename = "OrganisationunitFilter")]
#[serde(skip_serializing_if="Option::is_none")]
ou_filter: Option<String>,
#[serde(rename = "Aktion")]
#[serde(skip_serializing_if="Option::is_none")]
aktion: Option<String>,
#[serde(rename = "Top10")]
#[serde(skip_serializing_if="Option::is_none")]
top10: Option<String>,
#[serde(rename = "GroesseTextfeld")]
groesse_textfeld: u16,
#[serde(rename = "FilterAufheben")]
filter_aufheben: bool,
#[serde(rename = "Resizable")]
resizable: bool,
#[serde(rename = "Verschluesselt")]
verschluesselt: bool,
#[serde(rename = "MemoWidth")]
#[serde(skip_serializing_if="Option::is_none")]
memo_width: Option<u32>,
#[serde(rename = "MemoArt")]
#[serde(skip_serializing_if="Option::is_none")]
memo_art: Option<String>,
#[serde(rename = "DateValidFrom")]
date_valid_from: String,
#[serde(rename = "DateValidTo")]
date_valid_to: String,
#[serde(rename = "DateValidFuture")]
date_valid_future: bool,
#[serde(rename = "Titel")]
#[serde(skip_serializing_if="Option::is_none")]
titel: Option<String>,
#[serde(rename = "InAuswertung")]
in_auswertung: bool,
#[serde(rename = "InAuswertungGraph")]
in_auswertung_graph: bool,
#[serde(rename = "AlignmentPatModul")]
alignment_pat_modul: String,
#[serde(rename = "DirectionPatModul")]
direction_pat_modul: String,
#[serde(rename = "SeitenumbruchPatModul")]
seitenumbruch_pat_modul: bool,
#[serde(rename = "MarkierungIgnorieren")]
markierung_ignorieren: bool,
#[serde(rename = "SucheArt")]
#[serde(skip_serializing_if="Option::is_none")]
suche_art: Option<String>,
#[serde(rename = "SID")]
sid: String,
#[serde(rename = "GUID")]
guid: String,
#[serde(rename = "Revision")]
revision: u16,
#[serde(rename = "vorherigeWerte")]
vorherige_werte: String,
#[serde(rename = "EinfuegenVerhindern")]
einfuegen_verhindern: String,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct DataFormEntries {
#[serde(rename = "EntryName")]
#[serde(skip_serializing_if="Option::is_none")]
entry_name: Option<Vec<String>>
}