From 5ec9fa031b88973a85faef1e829db72912c98f9b Mon Sep 17 00:00:00 2001 From: Alexander Ott <45203494+Nirus2000@users.noreply.github.com> Date: Sun, 24 Nov 2024 13:26:05 +0100 Subject: [PATCH] Modify OLB PDF-Importer to support new transaction (#4367) Closes #4364 --- .../Kontoauszug02.txt | 199 ++++++++++++++++++ .../Kontoauszug03.txt | 199 ++++++++++++++++++ ...burgischeLandesbankAGPDFExtractorTest.java | 64 ++++++ ...ldenburgischeLandesbankAGPDFExtractor.java | 77 +++++-- 4 files changed, 522 insertions(+), 17 deletions(-) create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/Kontoauszug02.txt create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/Kontoauszug03.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/Kontoauszug02.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/Kontoauszug02.txt new file mode 100644 index 0000000000..5728035466 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/Kontoauszug02.txt @@ -0,0 +1,199 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.71.2 +----------------------------------------- + + + + + + + + + + Es betreut Sie: + Oldenburgische Landesbank AG + Postfach 26 07 + 26016 Oldenburg +1735/1735/00000/07 + + +Frau +name name BIC: OLBODEH2XXX +Musterstraße 01 IBAN: DE12 1234 1234 1234 1234 00 +01234 Musterstadt + + + + +Auszug Euro-Konto 123 41234 00 30.09.24 NR. 9/1 +---------------------------------------------------------------------------- +Alter Saldo EUR 100,00- +---------------------------------------------------------------------------- +Buchung Wert +Saldo per 31.08.2024 EUR 100,00- + +02.09.24 02.09. DA-GUTSCHR 100,00+ + name name + BIC-Ext IBAN-ext + OLB ETF MSCI World 1.Monat + +04.09.24 05.09. WERTPAPIERE 25,00- + Oldenburgische Landesbank AG + OLBODEH2XXX DE14280200500514148387 + WP-Abrechnung 3627899, Kauf, 02.09. + 2024, 109,320000, EUR, 0,228229, A0 + H078, DE000A0H0785, 123412340, iS. + EO G.B.C.1.5-10.5y.U.ETF DE Inhaber + TRA12345678 + +04.09.24 04.09. CORE-LA-EV EINGANG VORBEHALTEN 25,00+ + name, name + BIC-Ext IBAN-ext + Sparplan DE000A0H0785, DE1212341234 + 1234123400 + O3737265 + +05.09.24 05.09. WERTPAPIERE 100,00- + Oldenburgische Landesbank AG + OLBODEH2XXX DE14280200500514148387 + WP-Abrechnung 3669549, Kauf, 02.09. + + + --------------------- +Fortsetzung Seite 2 Übertrag EUR 100,00- + + + + 06-735 +Bitte beachten Sie unsere ergänzenden Hinweise zum Kontoauszug. VA 7 + + + + + + + + + +Auszug Euro-Konto 123 41234 00 30.09.24 NR. 9/2 + + Übertrag EUR 100,00- +Buchung Wert --------------------- + 2024, 105,800000, USD, 1,040920, A0 + RPWH, IE00B4L5Y983, 123412340, iSh + sIII-Core MSCI World U.ETF Register + TRA12345678 + +18.09.24 19.09. WERTPAPIERE 25,00- + Oldenburgische Landesbank AG + OLBODEH2XXX DE14280200500514148387 + WP-Abrechnung 3745006, Kauf, 16.09. + 2024, 110,960000, EUR, 0,224856, A0 + H078, DE000A0H0785, 123412340, iS. + EO G.B.C.1.5-10.5y.U.ETF DE Inhaber + TRA12345678 + +18.09.24 19.09. WERTPAPIERE 100,00- + Oldenburgische Landesbank AG + OLBODEH2XXX DE14280200500514148387 + WP-Abrechnung 3752501, Kauf, 16.09. + 2024, 105,440000, USD, 1,053844, A0 + RPWH, IE00B4L5Y983, 123412340, iSh + sIII-Core MSCI World U.ETF Register + TRA3752501 + +18.09.24 18.09. CORE-LA-EV EINGANG VORBEHALTEN 25,00+ + name, name + BIC-ext IBAN-ext + Sparplan DE000A0H0785, DE12123412341234 + 1234123400 + O3855204 + +30.09.24 30.09. GUTSCHRIFT 200,00+ + name name + BIC-ext IBAN-ext + Konto ausgleichen +---------------------------------------------------------------------------- +Neuer Saldo EUR 0,00+ +---------------------------------------------------------------------------- + + + + + + + + + + + +name name + + 06-735 +Bitte beachten Sie unsere ergänzenden Hinweise zum Kontoauszug. VA 7 +Genehmigung des Rechnungsabschlusses: Einwendungen wegen Unrichtigkeit oder Unvollständigkeit des Rechnungsab- +schlusses müssen Sie spätestens vor Ablauf von sechs Wochen nach dessen Zugang erheben. Sofern Sie Ihre Einwendungen in +Textform geltend machen, genügt die Absendung innerhalb der Sechs-Wochen-Frist. Das Unterlassen rechtzeitiger Einwendungen +gilt als Genehmigung des Rechnungsabschlusses. + +Wir bitten Sie, etwaige Einwendungen an + +Oldenburgische Landesbank AG +Compliance +Postfach 26 05 +26016 Oldenburg + +zu senden. + +Schecks, Wechsel und sonstige Einzugspapiere werden unter dem Vorbehalt des Eingangs gutgeschrieben. Lastschriften und +Schecks sind eingelöst, wenn die Belastungsbuchung nicht spätestens am zweiten Bankarbeitstag nach Ihrer Vornahme rückgän- +gig gemacht wird. + +Der angegebene Kontostand berücksichtigt nicht die Wertstellung der Buchungen. Dies bedeutet, dass der genannte Betrag nicht +dem tatsächlich zur Verfügung stehenden Guthaben entsprechen muss. Somit können bei Verfügungen möglicherweise Zinsen für +die Inanspruchnahme einer eingeräumten oder geduldeten Kontoüberziehung anfallen. + +Bei Ausweis von Entgelten/Gebühren/Zinsen gilt dieser Auszug in Verbindung mit den Auszugsbeilagen, dem Kontoeröffnungsan- +trag und den vertraglichen Grundlagen als Rechnung im Sinne des § 14 UStG. Soweit nichts anderes bestimmt ist, stimmt der +Zeitpunkt der Lieferung oder Leistung mit dem Buchungsdatum überein. Unsere USt-ld Nr.: DE117471233; vorbehaltlich § 9 UStG +handelt es sich um eine umsatzsteuerbefreite Finanzdienstleistung. + +Sparkonten: Der letzte Sparkontoauszug gilt als Sparurkunde im Sinne unserer Bedingungen für Sparkonten mit SparCard und +der Bedingungen für den Sparverkehr - Bedingungen für Sparkonten (Loseblatt-System). Bei Sparkonten mit SparCard können +Kontoauszüge jederzeit an den Kontoauszugsdruckern der Bank abgerufen werden. Werden Sparkontoauszüge länger als 12 Mo- +nate nicht am Kontoauszugsdrucker abgerufen, erstellt die Bank automatisch einen Auszug, der dem Kontoinhaber zugesandt wird. +Bei allen anderen Sparkonten werden die Kontoauszüge gemäß Vereinbarung zugesandt. Im Sparkontoauszug sind die Ein- und +Auszahlungen, sonstige Gutschriften und Belastungen sowie der jeweilige Kontostand vermerkt. Eine Kontoauflösung ist nur gegen +Vorlage des letzten Sparkontoauszuges möglich. +Bitte bewahren Sie diese Sparurkunde sorgfältig auf! + +Guthaben sind als Einlagen nach Maßgabe des Einlagensicherungsgesetzes entschädigungsfähig. Nähere Informationen können +dem „Informationsbogen für den Einleger“ entnommen werden. + +Zinsanpassungen bei „geduldeten Überziehungen“ gemäß § 505 Absatz 1 BGB: Erhöht sich der letzte veröffentlichte Monats- +durchschnittssatz für EURIBOR-Dreimonatsgeld* gegenüber dem im Vormonat der letzten Zinsanpassung bzw. Zinsvereinbarung +ermittelten Monatsdurchschnittssatz um mehr als 0,25 Prozentpunkte, so sind wir berechtigt, den Vertragszinssatz nach billigem +Ermessen (§ 315 BGB) maximal um die Veränderung des Monatsdurchschnittssatzes anzuheben. Wir werden den Vertragszins +nach billigem Ermessen mindestens um die Veränderung des Monatsdurchschnittssatzes senken, wenn sich der Monatsdurch- +schnittssatz für EURIBOR-Dreimonatsgeld um mehr als 0,25 Prozentpunkte ermäßigt hat; bei Zinserhöhungen und Zinssenkungen +werden wir unser Ermessen in gleicher Weise ausüben. Faktoren, wie Veränderungen des Kreditausfallrisikos des Kreditnehmers, +des Ratings der Bank sowie der innerbetrieblichen Kostenkalkulation bleiben bei der Ausübung des Ermessens außer Betracht. + +Falls der Refinanzierungszinssatz EURIBOR in der Zukunft aufgehoben wird, tritt für die Zwecke dieser Definition an dessen Stelle +der Refinanzierungszinssatz, der den EURIBOR funktional ersetzt (der „Nachfolgerefinanzierungszinssatz“). Sofern durch eine +Aufsichtsbehörde, eine Zentralbank oder eine andere vergleichbare öffentliche Stelle offiziell ein Nachfolger für den EURIBOR +bestimmt wird gilt der so bestimmte Nachfolgerefinanzierungszinssatz. Gibt es keinen so bestimmten Nachfolger für den EURIBOR, +so ist derjenige Referenzzinssatz der Nachfolgerefinanzierungszinssatz, der im Markt als Nachfolger EURIBOR allgemein aner- +kannt wird. Unter mehreren Nachfolgereferenzzinssätzen ist derjenige maßgebend, der dem EURIBOR wirtschaftlich am nächsten +kommt. + +Gem. Art. 28 Abs. 2 der Benchmark-Verordnung (EU) 2016/1011 hat die Bank als Verwender von Referenzwerten in der Vertrags- +beziehung mit Kreditnehmern einen Notfallplan aufgestellt und pflegt diesen kontinuierlich. Die Bank orientiert sich in Notfällen auch +in der Vertragsbeziehung mit den Kreditnehmern an dem Notfallplan. In dem Notfallplan sind Maßnahmen dargelegt, welche die +Bank ergreift, wenn ein Referenzwert sich wesentlich ändert oder nicht mehr bereitgestellt wird. In diesen Fällen wird vom Bank- +steuerungskomitee über die Verwendung alternativer Referenzwerte entschieden. + +* Bei der Dreimonats-European-lnter-Bank-Offered-Rate (EURIBOR) handelt es sich um einen Satz, zu dem sich Banken, die im Gebiet der europäischen Wirt- +schafts- und Währungsunion ansässig sind, untereinander Dreimonatsgelder leihen. Die Durchschnittssätze für EURIBOR-Dreimonatsgeld werden monatlich in +der amtlichen Zinsstatistik der Deutschen Bundesbank veröffentlicht. Diese spiegeln jedoch wegen der vielschichtigen Refinanzierungsmethodik der Bank die +Änderungen der Refinanzierungsbedingungen nicht exakt wider. diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/Kontoauszug03.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/Kontoauszug03.txt new file mode 100644 index 0000000000..a92541fcbc --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/Kontoauszug03.txt @@ -0,0 +1,199 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.71.2 +----------------------------------------- + + + + + + + + + + Es betreut Sie: + Oldenburgische Landesbank AG + Postfach 26 07 + 26016 Oldenburg +1735/1735/00000/07 + + +Frau +name name BIC: OLBODEH2XXX +Musterstraße 01 IBAN: DE12 1234 1234 1234 1234 00 +01234 Musterstadt + + + + +Auszug Euro-Konto 123 41234 00 31.10.24 NR. 10/1 +---------------------------------------------------------------------------- +Alter Saldo EUR 0,00+ +---------------------------------------------------------------------------- +Buchung Wert +Rechnungsabschluss per 30.09.2024 +Saldo EUR 0,00+ +01.10. 01.10. DA-GUTSCHR 200,00+ + name name + BIC-Ext IBAN-ext + OLB ETF MSCI World 1.Monat +04.10. 07.10. WERTPAPIERE 25,00- + Oldenburgische Landesbank AG + OLBODEH2XXX DE14280200500514148387 + WP-Abrechnung 3818643, Kauf, 01.10. + 2024, 111,960000, EUR, 0,222847, A0 + H078, DE000A0H0785, 123412340, iS. + EO G.B.C.1.5-10.5y.U.ETF DE Inhaber + TRA12345678 +04.10. 04.10. CORE-LA-EV EINGANG VORBEHALTEN 25,00+ + name, name + BIC-Ext IBAN-ext + Sparplan DE000A0H0785, DE12123412341234123400 + O3948067 +07.10. 07.10. WERTPAPIERE 100,00- + Oldenburgische Landesbank AG + OLBODEH2XXX DE14280200500514148387 + WP-Abrechnung 3858163, Kauf, 01.10. + 2024, 106,860000, USD, 1,033489, A0 + RPWH, IE00B4L5Y983, 123412340, iSh + sIII-Core MSCI World U.ETF Register + TRA12345678 + + + --------------------- +Fortsetzung Seite 2 Übertrag EUR 100,00+ + + + + 06-735 +Bitte beachten Sie unsere ergänzenden Hinweise zum Kontoauszug. VA 7 + + + + + + + + + +Auszug Euro-Konto 123 41234 00 31.10.24 NR. 10/2 + + Übertrag EUR 100,00+ +Buchung Wert --------------------- +16.10. 15.10. WP-ZINS/DIV 31,73+ + Oldenburgische Landesbank AG + OLBODEH2XXX DE14280200500514148387 + Dividende: 16.10.2024, CA10111, A0F + 5UH, DE000A0F5UH1, 123412340 +17.10. 18.10. WERTPAPIERE 25,00- + Oldenburgische Landesbank AG + OLBODEH2XXX DE14280200500514148387 + WP-Abrechnung 4001881, Kauf, 15.10. + 2024, 110,820000, EUR, 0,225140, A0 + H078, DE000A0H0785, 123412340, iS. + EO G.B.C.1.5-10.5y.U.ETF DE Inhaber + TRA12345678 +17.10. 18.10. WERTPAPIERE 100,00- + Oldenburgische Landesbank AG + OLBODEH2XXX DE14280200500514148387 + WP-Abrechnung 4059399, Kauf, 15.10. + 2024, 108,840000, USD, 0,998550, A0 + RPWH, IE00B4L5Y983, 123412340, iSh + sIII-Core MSCI World U.ETF Register + TRA12345678 +17.10. 17.10. CORE-LA-EV EINGANG VORBEHALTEN 25,00+ + name, name + BIC-Ext IBAN-Ext + Sparplan DE000A0H0785, DE12123412341234123400 + O4121710 +18.10. 22.10. WERTPAPIERE 31,73- + Oldenburgische Landesbank AG + OLBODEH2XXX DE14280200500514148387 + WP-Abrechnung 4090967, Kauf, 17.10. + 2024, 30,050000, EUR, 1,053910, A0F + 5UH, DE000A0F5UH1, 123412340, iSh. + ST.Gl.Sel.Div.100 U.ETF DE Inhaber- + TRA12345678 +---------------------------------------------------------------------------- +Neuer Saldo EUR 0,00+ +---------------------------------------------------------------------------- + + + + + + + + + + + +name name + + 06-735 +Bitte beachten Sie unsere ergänzenden Hinweise zum Kontoauszug. VA 7 +Genehmigung des Rechnungsabschlusses: Einwendungen wegen Unrichtigkeit oder Unvollständigkeit des Rechnungsab- +schlusses müssen Sie spätestens vor Ablauf von sechs Wochen nach dessen Zugang erheben. Sofern Sie Ihre Einwendungen in +Textform geltend machen, genügt die Absendung innerhalb der Sechs-Wochen-Frist. Das Unterlassen rechtzeitiger Einwendungen +gilt als Genehmigung des Rechnungsabschlusses. + +Wir bitten Sie, etwaige Einwendungen an + +Oldenburgische Landesbank AG +Compliance +Postfach 26 05 +26016 Oldenburg + +zu senden. + +Schecks, Wechsel und sonstige Einzugspapiere werden unter dem Vorbehalt des Eingangs gutgeschrieben. Lastschriften und +Schecks sind eingelöst, wenn die Belastungsbuchung nicht spätestens am zweiten Bankarbeitstag nach Ihrer Vornahme rückgän- +gig gemacht wird. + +Der angegebene Kontostand berücksichtigt nicht die Wertstellung der Buchungen. Dies bedeutet, dass der genannte Betrag nicht +dem tatsächlich zur Verfügung stehenden Guthaben entsprechen muss. Somit können bei Verfügungen möglicherweise Zinsen für +die Inanspruchnahme einer eingeräumten oder geduldeten Kontoüberziehung anfallen. + +Bei Ausweis von Entgelten/Gebühren/Zinsen gilt dieser Auszug in Verbindung mit den Auszugsbeilagen, dem Kontoeröffnungsan- +trag und den vertraglichen Grundlagen als Rechnung im Sinne des § 14 UStG. Soweit nichts anderes bestimmt ist, stimmt der +Zeitpunkt der Lieferung oder Leistung mit dem Buchungsdatum überein. Unsere USt-ld Nr.: DE117471233; vorbehaltlich § 9 UStG +handelt es sich um eine umsatzsteuerbefreite Finanzdienstleistung. + +Sparkonten: Der letzte Sparkontoauszug gilt als Sparurkunde im Sinne unserer Bedingungen für Sparkonten mit SparCard und +der Bedingungen für den Sparverkehr - Bedingungen für Sparkonten (Loseblatt-System). Bei Sparkonten mit SparCard können +Kontoauszüge jederzeit an den Kontoauszugsdruckern der Bank abgerufen werden. Werden Sparkontoauszüge länger als 12 Mo- +nate nicht am Kontoauszugsdrucker abgerufen, erstellt die Bank automatisch einen Auszug, der dem Kontoinhaber zugesandt wird. +Bei allen anderen Sparkonten werden die Kontoauszüge gemäß Vereinbarung zugesandt. Im Sparkontoauszug sind die Ein- und +Auszahlungen, sonstige Gutschriften und Belastungen sowie der jeweilige Kontostand vermerkt. Eine Kontoauflösung ist nur gegen +Vorlage des letzten Sparkontoauszuges möglich. +Bitte bewahren Sie diese Sparurkunde sorgfältig auf! + +Guthaben sind als Einlagen nach Maßgabe des Einlagensicherungsgesetzes entschädigungsfähig. Nähere Informationen können +dem „Informationsbogen für den Einleger“ entnommen werden. + +Zinsanpassungen bei „geduldeten Überziehungen“ gemäß § 505 Absatz 1 BGB: Erhöht sich der letzte veröffentlichte Monats- +durchschnittssatz für EURIBOR-Dreimonatsgeld* gegenüber dem im Vormonat der letzten Zinsanpassung bzw. Zinsvereinbarung +ermittelten Monatsdurchschnittssatz um mehr als 0,25 Prozentpunkte, so sind wir berechtigt, den Vertragszinssatz nach billigem +Ermessen (§ 315 BGB) maximal um die Veränderung des Monatsdurchschnittssatzes anzuheben. Wir werden den Vertragszins +nach billigem Ermessen mindestens um die Veränderung des Monatsdurchschnittssatzes senken, wenn sich der Monatsdurch- +schnittssatz für EURIBOR-Dreimonatsgeld um mehr als 0,25 Prozentpunkte ermäßigt hat; bei Zinserhöhungen und Zinssenkungen +werden wir unser Ermessen in gleicher Weise ausüben. Faktoren, wie Veränderungen des Kreditausfallrisikos des Kreditnehmers, +des Ratings der Bank sowie der innerbetrieblichen Kostenkalkulation bleiben bei der Ausübung des Ermessens außer Betracht. + +Falls der Refinanzierungszinssatz EURIBOR in der Zukunft aufgehoben wird, tritt für die Zwecke dieser Definition an dessen Stelle +der Refinanzierungszinssatz, der den EURIBOR funktional ersetzt (der „Nachfolgerefinanzierungszinssatz“). Sofern durch eine +Aufsichtsbehörde, eine Zentralbank oder eine andere vergleichbare öffentliche Stelle offiziell ein Nachfolger für den EURIBOR +bestimmt wird gilt der so bestimmte Nachfolgerefinanzierungszinssatz. Gibt es keinen so bestimmten Nachfolger für den EURIBOR, +so ist derjenige Referenzzinssatz der Nachfolgerefinanzierungszinssatz, der im Markt als Nachfolger EURIBOR allgemein aner- +kannt wird. Unter mehreren Nachfolgereferenzzinssätzen ist derjenige maßgebend, der dem EURIBOR wirtschaftlich am nächsten +kommt. + +Gem. Art. 28 Abs. 2 der Benchmark-Verordnung (EU) 2016/1011 hat die Bank als Verwender von Referenzwerten in der Vertrags- +beziehung mit Kreditnehmern einen Notfallplan aufgestellt und pflegt diesen kontinuierlich. Die Bank orientiert sich in Notfällen auch +in der Vertragsbeziehung mit den Kreditnehmern an dem Notfallplan. In dem Notfallplan sind Maßnahmen dargelegt, welche die +Bank ergreift, wenn ein Referenzwert sich wesentlich ändert oder nicht mehr bereitgestellt wird. In diesen Fällen wird vom Bank- +steuerungskomitee über die Verwendung alternativer Referenzwerte entschieden. + +* Bei der Dreimonats-European-lnter-Bank-Offered-Rate (EURIBOR) handelt es sich um einen Satz, zu dem sich Banken, die im Gebiet der europäischen Wirt- +schafts- und Währungsunion ansässig sind, untereinander Dreimonatsgelder leihen. Die Durchschnittssätze für EURIBOR-Dreimonatsgeld werden monatlich in +der amtlichen Zinsstatistik der Deutschen Bundesbank veröffentlicht. Diese spiegeln jedoch wegen der vielschichtigen Refinanzierungsmethodik der Bank die +Änderungen der Refinanzierungsbedingungen nicht exakt wider. diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/OldenburgischeLandesbankAGPDFExtractorTest.java b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/OldenburgischeLandesbankAGPDFExtractorTest.java index 782b3e37ef..9a76e48013 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/OldenburgischeLandesbankAGPDFExtractorTest.java +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/oldenburgischelandesbankag/OldenburgischeLandesbankAGPDFExtractorTest.java @@ -629,6 +629,70 @@ public void testKontoauszug01() hasSource("Kontoauszug01.txt"), hasNote(null)))); } + @Test + public void testKontoauszug02() + { + OldenburgischeLandesbankAGPDFExtractor extractor = new OldenburgischeLandesbankAGPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kontoauszug02.txt"), + errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(4L)); + assertThat(results.size(), is(4)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2024-09-02"), hasAmount("EUR", 100.00), // + hasSource("Kontoauszug02.txt"), hasNote(null)))); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2024-09-04"), hasAmount("EUR", 25.00), // + hasSource("Kontoauszug02.txt"), hasNote(null)))); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2024-09-18"), hasAmount("EUR", 25.00), // + hasSource("Kontoauszug02.txt"), hasNote(null)))); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2024-09-30"), hasAmount("EUR", 200.00), // + hasSource("Kontoauszug02.txt"), hasNote(null)))); + } + + @Test + public void testKontoauszug03() + { + OldenburgischeLandesbankAGPDFExtractor extractor = new OldenburgischeLandesbankAGPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kontoauszug03.txt"), + errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(3L)); + assertThat(results.size(), is(3)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2024-10-01"), hasAmount("EUR", 200.00), // + hasSource("Kontoauszug03.txt"), hasNote(null)))); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2024-10-04"), hasAmount("EUR", 25.00), // + hasSource("Kontoauszug03.txt"), hasNote(null)))); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2024-10-17"), hasAmount("EUR", 25.00), // + hasSource("Kontoauszug03.txt"), hasNote(null)))); + } + @Test public void testFusion01() { diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/OldenburgischeLandesbankAGPDFExtractor.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/OldenburgischeLandesbankAGPDFExtractor.java index e46c4435c8..6e49a80ca3 100644 --- a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/OldenburgischeLandesbankAGPDFExtractor.java +++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/OldenburgischeLandesbankAGPDFExtractor.java @@ -340,14 +340,22 @@ private void addAccountStatementTransaction() // @formatter:on .section("currency") // .match("^Alter Saldo.* (?[\\w]{3}).*$") // - .assign((ctx, v) -> ctx.put("currency", asCurrencyCode(v.get("currency"))))); + .assign((ctx, v) -> ctx.put("currency", asCurrencyCode(v.get("currency")))) + + // @formatter:off + // Rechnungsabschluss per 30.09.2024 + // @formatter:on + .section("year").optional() // + .match("^Rechnungsabschluss per [\\d]{2}\\.[\\d]{2}\\.(?[\\d]{4}).*$") // + .assign((ctx, v) -> ctx.put("year", v.get("year")))); this.addDocumentTyp(type); - // @formatter:off - // 03.08.23 03.08. CORE-LA-EV EINGANG VORBEHALTEN 10,00+ - // @formatter:on - Block depositRemovalBlock = new Block("^[\\d]{2}\\.[\\d]{2}\\.[\\d]{2} [\\d]{2}\\.[\\d]{2}\\. .* EINGANG VORBEHALTEN.* [\\.,\\d]+[\\+|\\-].*$"); + Block depositRemovalBlock = new Block("^[\\d]{2}\\.[\\d]{2}\\.([\\d]{2})? [\\d]{2}\\.[\\d]{2}\\. " + + "(.* EINGANG VORBEHALTEN" + + "|DA\\-GUTSCHR" + + "|GUTSCHRIFT)" + + "[\\s]{1,}[\\.,\\d]+[\\+|\\-].*$"); type.addBlock(depositRemovalBlock); depositRemovalBlock.set(new Transaction() @@ -357,18 +365,53 @@ private void addAccountStatementTransaction() return accountTransaction; }) - .section("year", "date", "amount", "type") // - .documentContext("currency") // - .match("^[\\d]{2}\\.[\\d]{2}\\.(?[\\d]{2}) (?[\\d]{2}\\.[\\d]{2}\\.) .* EINGANG VORBEHALTEN.* (?[\\.,\\d]+)(?[\\+|\\-]).*$") // - .assign((t, v) -> { - // Is type is "-" change from DEPOSIT to REMOVAL - if ("-".equals(trim(v.get("type")))) - t.setType(AccountTransaction.Type.REMOVAL); - - t.setDateTime(asDate(v.get("date") + v.get("year"))); - t.setCurrencyCode(v.get("currency")); - t.setAmount(asAmount(v.get("amount"))); - }) + .oneOf( // + // @formatter:off + // 03.08.23 03.08. CORE-LA-EV EINGANG VORBEHALTEN 10,00+ + // 02.09.24 02.09. DA-GUTSCHR 100,00+ + // 30.09.24 30.09. GUTSCHRIFT 200,00+ + // @formatter:on + section -> section // + .attributes("year", "date", "amount", "type") // + .documentContext("currency") // + .match("^[\\d]{2}\\.[\\d]{2}\\.(?[\\d]{2}) (?[\\d]{2}\\.[\\d]{2}\\.) " + + "(.* EINGANG VORBEHALTEN" + + "|DA\\-GUTSCHR" + + "|GUTSCHRIFT)" + + "[\\s]{1,}(?[\\.,\\d]+)(?[\\+|\\-]).*$") // + .assign((t, v) -> { + // @formatter:off + // Is type is "-" change from DEPOSIT to REMOVAL + // @formatter:on + if ("-".equals(trim(v.get("type")))) + t.setType(AccountTransaction.Type.REMOVAL); + + t.setDateTime(asDate(v.get("date") + v.get("year"))); + t.setCurrencyCode(v.get("currency")); + t.setAmount(asAmount(v.get("amount"))); + }), + // @formatter:off + // 01.10. 01.10. DA-GUTSCHR 200,00+ + // 04.10. 04.10. CORE-LA-EV EINGANG VORBEHALTEN 25,00+ + // @formatter:on + section -> section // + .attributes("date", "amount", "type") // + .documentContext("currency", "year") // + .match("^[\\d]{2}\\.[\\d]{2}\\. (?[\\d]{2}\\.[\\d]{2}\\.) " + + "(.* EINGANG VORBEHALTEN" + "|DA\\-GUTSCHR" + + "|GUTSCHRIFT)" + + "[\\s]{1,}(?[\\.,\\d]+)(?[\\+|\\-]).*$") // + .assign((t, v) -> { + // @formatter:off + // Is type is "-" change from DEPOSIT to REMOVAL + // @formatter:on + if ("-".equals(trim(v.get("type")))) + t.setType(AccountTransaction.Type.REMOVAL); + + t.setDateTime(asDate(v.get("date") + v.get("year"))); + t.setCurrencyCode(v.get("currency")); + t.setAmount(asAmount(v.get("amount"))); + })) .wrap(TransactionItem::new)); }