also parse 7th par of wucherg

This commit is contained in:
philipp 2023-11-04 10:22:27 +01:00
parent 3fa97cca34
commit 9bd90e15bd
2 changed files with 74 additions and 7 deletions

1
data/par/wucher7.xml Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8"?><risdok stylesheet="RISJudikaturXML2XHTML11.xsl" h-version="4.1.5_31.05.2023" h-creator="PWRIVIE45.BR2RIS.BR2RISConverter_14.09.2023_09:31:47" h-created="14. September 2023, 09:32:00" xmlns="http://www.bka.gv.at"><metadaten /><nutzdaten><abschnitt nr="1" typ="ns" paperf="h" endnhier="true"><kzinhalt typ="p"><absatz typ="kz" halign="j"><tab align="z" position="212.6" leader="o" /><tab align="r" position="425.25" leader="o" />Bundesrecht konsolidiert</absatz></kzinhalt><kzinhalt typ="f"><absatz typ="kz" halign="j"><tab align="z" position="212.6" leader="o" /><tab align="r" position="425.25" leader="o" />Bundesrecht konsolidiert</absatz></kzinhalt><fzinhalt typ="p"><absatz typ="fz" halign="j">www.ris.bka.gv.at<tab align="z" position="212.6" leader="o" /><tab align="r" position="425.25" leader="o" />Seite <feld code="+PAGE++%5c*+MERGEFORMAT+"><span>2</span></feld> von <feld code="+NUMPAGES++%5c*+MERGEFORMAT+"><span>2</span></feld></absatz></fzinhalt><fzinhalt typ="f"><absatz typ="fz" halign="j">www.ris.bka.gv.at<tab align="z" position="212.6" leader="o" /><tab align="r" position="425.25" leader="o" />Seite <feld code="+PAGE++%5c*+MERGEFORMAT+"><span>1</span></feld> von <feld code="+NUMPAGES++%5c*+MERGEFORMAT+"><span>1</span></feld></absatz></fzinhalt><ueberschrift typ="titel" halign="j">Kurztitel</ueberschrift><absatz typ="erltext" ct="kurztitel" halign="j">Wuchergesetz 1949</absatz><ueberschrift typ="titel" halign="j">Kundmachungsorgan</ueberschrift><absatz typ="erltext" ct="kundmachungsorgan" halign="j">BGBl. Nr. 271/1949 zuletzt geändert durch BGBl. I Nr. 98/2001</absatz><ueberschrift typ="titel" halign="j">Typ</ueberschrift><absatz typ="erltext" ct="typ" halign="j">BG</absatz><ueberschrift typ="titel" halign="j">§/Artikel/Anlage</ueberschrift><absatz typ="erltext" ct="artikel_anlage" halign="j">§ 7</absatz><ueberschrift typ="titel" halign="j">Inkrafttretensdatum</ueberschrift><absatz typ="erltext" ct="ikra" halign="j">01.01.2002</absatz><ueberschrift typ="titel" halign="j">Index</ueberschrift><absatz typ="erltext" ct="index" halign="j">20/06 Konsumentenschutz</absatz><ueberschrift typ="titel" halign="j">Text</ueberschrift><ueberschrift typ="para" ct="text" halign="c">Rechtsfolgen der Nichtigkeit eines wucherischen Vertrages.</ueberschrift><absatz typ="abs" ct="text" halign="j"><gldsym>§ 7.</gldsym> (1) Ist ein Vertrag nach den vorstehenden Bestimmungen nichtig, so hat jeder der beiden Teile alles zurückzustellen, was er aus dem nichtigen Geschäfte zu seinem Vorteil erhalten hat. Insbesondere sind Geldzahlungen mit den gesetzlichen Zinsen vom Empfangstage zurückzuerstatten, die übergebenen Sachen zurückzustellen oder deren Wert zur Zeit des Empfanges zu ersetzen, die auf die Sache gemachten notwendigen und nützlichen Verwendungen zu ersetzen und für die Benützung und die Entwertung der Sache in der Zwischenzeit eine angemessene Vergütung zu leisten. Ergibt sich aus der Berechnung der beiderseitigen Ansprüche ein Mehranspruch für einen der Vertragsteile, so haftet hiefür die für den vertragsmäßigen Anspruch erworbene Sicherstellung.</absatz><absatz typ="abs" ct="text" halign="j">(2) Ist jedoch die Gewährung oder Verlängerung von Kredit nach den vorstehenden Bestimmungen nichtig, so hat der Benachteiligte für den erhaltenen Kreditbetrag vom Empfangstag bis zur Rückzahlung sofern im Vertrag nicht eine geringere Verzinsung vorgesehen ist - Zinsen in der Höhe des Zweifachen des im Zeitpunkt der Schließung des Vertrags geltenden Basiszinssatzes zu vergüten. Er kann für die Rückzahlung des Erhaltenen die im Vertrag vorgesehenen Zahlungsfristen in Anspruch nehmen. Bestimmungen, nach denen der Benachteiligte in besonderen Fällen weitergehende Rechte hat, bleiben unberührt.</absatz><ueberschrift typ="titel" halign="j">Zuletzt aktualisiert am</ueberschrift><absatz typ="erltext" ct="geaendert" halign="j">14.09.2023</absatz><ueberschrift typ="titel" halign="j">Gesetzesnummer</ueberschrift><absatz typ="erltext" ct="gesnr" halign="j">10001899</absatz><ueberschrift typ="titel" halign="j">Dokumentnummer</ueberschrift><absatz typ="erltext" ct="doknr" halign="j">NOR40022184</absatz></abschnitt></nutzdaten><layoutdaten paperf="7" paperh="841.95" paperw="595.35" margl="85.05" margr="85.05" margt="85.05" margb="85.05" headerd="28.35" footerd="65.2" gutter="0" gutterpos="0" deftab="35.4" /></risdok>

View File

@ -68,7 +68,7 @@ impl Nutzdaten {
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub(crate) struct Abschnitt { pub(crate) struct Abschnitt {
ueberschriftPara: Option<UeberschriftPara>, ueberschriftPara: Option<UeberschriftPara>,
absatz: AbsatzAbs, absatze: Vec<AbsatzAbs>,
} }
impl Abschnitt { impl Abschnitt {
pub(crate) fn parse(n: Node) -> Self { pub(crate) fn parse(n: Node) -> Self {
@ -106,7 +106,19 @@ impl Abschnitt {
} }
} }
let absatz = AbsatzAbs::parse(c.next().unwrap()); let mut absatze = Vec::new();
loop {
match c.peek() {
Some(child) => {
if AbsatzAbs::test(child) {
absatze.push(AbsatzAbs::parse(c.next().unwrap()));
continue;
}
break;
}
None => break,
}
}
// Skip all UeberschriftTitle and Absatz // Skip all UeberschriftTitle and Absatz
loop { loop {
@ -130,25 +142,39 @@ impl Abschnitt {
Self { Self {
ueberschriftPara, ueberschriftPara,
absatz, absatze,
} }
} }
} }
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub(crate) struct AbsatzAbs { pub(crate) struct AbsatzAbs {
gldsym: String, gldsym: Option<String>,
content: String, content: String,
} }
impl AbsatzAbs { impl AbsatzAbs {
pub(crate) fn test(n: &Node) -> bool {
n.tag_name().name() == "absatz" && n.attribute("typ").unwrap() == "abs"
}
pub(crate) fn parse(n: Node) -> Self { pub(crate) fn parse(n: Node) -> Self {
assert!(n.tag_name().name() == "absatz"); assert!(n.tag_name().name() == "absatz");
assert_eq!(n.attribute("typ").unwrap(), "abs"); assert_eq!(n.attribute("typ").unwrap(), "abs");
let mut c = n.children(); let mut c = n.children().peekable();
let gldsym = match c.peek() {
Some(child) => {
if Leaf::test(child, "gldsym".into()) {
Some(Leaf::parse(c.next().unwrap(), "gldsym".into()).replace("\u{a0}", " "))
} else {
None
}
}
None => None,
};
let ret = Self { let ret = Self {
gldsym: Leaf::parse(c.next().unwrap(), "gldsym".into()).replace("\u{a0}", " "), gldsym,
content: c.next().unwrap().text().unwrap().trim().into(), content: c.next().unwrap().text().unwrap().trim().into(),
}; };
@ -163,6 +189,9 @@ pub(crate) struct Leaf {
content: String, content: String,
} }
impl Leaf { impl Leaf {
pub(crate) fn test(n: &Node, name: String) -> bool {
n.tag_name().name() == name && n.children().into_iter().count() == 1
}
pub(crate) fn parse(n: Node, name: String) -> String { pub(crate) fn parse(n: Node, name: String) -> String {
assert!(n.tag_name().name() == name); assert!(n.tag_name().name() == name);
@ -281,6 +310,43 @@ mod tests {
abschnitt.ueberschriftPara.unwrap().content, abschnitt.ueberschriftPara.unwrap().content,
"Nichtigkeit eines wucherischen Vertrages." "Nichtigkeit eines wucherischen Vertrages."
); );
assert_eq!(abschnitt.absatz, AbsatzAbs {gldsym: "§ 1.".into(), content: "Ein Vertrag ist nichtig, wenn jemand den Leichtsinn, die Zwangslage, Verstandesschwäche, Unerfahrenheit oder Gemütsaufregung eines anderen dadurch ausbeutet, daß er sich oder einem Dritten für eine Leistung eine Gegenleistung versprechen oder gewähren läßt, deren Vermögenswert zu dem Werte seiner Leistung in auffallendem Mißverhältnis steht.".into()}); let expected = vec![
AbsatzAbs {
gldsym: Some("§ 1.".into()),
content: "Ein Vertrag ist nichtig, wenn jemand den Leichtsinn, die Zwangslage, Verstandesschwäche, Unerfahrenheit oder Gemütsaufregung eines anderen dadurch ausbeutet, daß er sich oder einem Dritten für eine Leistung eine Gegenleistung versprechen oder gewähren läßt, deren Vermögenswert zu dem Werte seiner Leistung in auffallendem Mißverhältnis steht.".into()
}
];
assert_eq!(abschnitt.absatze, expected);
}
#[test]
fn deserialize_wucher2_success() {
let mut file = File::open("data/par/wucher7.xml").unwrap();
let mut xml = String::new();
file.read_to_string(&mut xml).unwrap();
let risdok = Risdok::from_str(&xml);
if risdok.is_err() {
println!("{:#?}", risdok.as_ref().err());
}
assert!(risdok.is_ok());
let abschnitt = risdok.unwrap().nutzdaten.abschnitt;
assert_eq!(
abschnitt.ueberschriftPara.unwrap().content,
"Rechtsfolgen der Nichtigkeit eines wucherischen Vertrages."
);
let expected = vec![
AbsatzAbs {
gldsym: Some("§ 7.".into()),
content: "(1) Ist ein Vertrag nach den vorstehenden Bestimmungen nichtig, so hat jeder der beiden Teile alles zurückzustellen, was er aus dem nichtigen Geschäfte zu seinem Vorteil erhalten hat. Insbesondere sind Geldzahlungen mit den gesetzlichen Zinsen vom Empfangstage zurückzuerstatten, die übergebenen Sachen zurückzustellen oder deren Wert zur Zeit des Empfanges zu ersetzen, die auf die Sache gemachten notwendigen und nützlichen Verwendungen zu ersetzen und für die Benützung und die Entwertung der Sache in der Zwischenzeit eine angemessene Vergütung zu leisten. Ergibt sich aus der Berechnung der beiderseitigen Ansprüche ein Mehranspruch für einen der Vertragsteile, so haftet hiefür die für den vertragsmäßigen Anspruch erworbene Sicherstellung.".into()
},
AbsatzAbs {
gldsym: None,
content: "(2) Ist jedoch die Gewährung oder Verlängerung von Kredit nach den vorstehenden Bestimmungen nichtig, so hat der Benachteiligte für den erhaltenen Kreditbetrag vom Empfangstag bis zur Rückzahlung sofern im Vertrag nicht eine geringere Verzinsung vorgesehen ist - Zinsen in der Höhe des Zweifachen des im Zeitpunkt der Schließung des Vertrags geltenden Basiszinssatzes zu vergüten. Er kann für die Rückzahlung des Erhaltenen die im Vertrag vorgesehenen Zahlungsfristen in Anspruch nehmen. Bestimmungen, nach denen der Benachteiligte in besonderen Fällen weitergehende Rechte hat, bleiben unberührt.".into()
}
];
assert_eq!(abschnitt.absatze, expected);
} }
} }