From b6e46c39490c86e17456709df8989d0600d2eb6c Mon Sep 17 00:00:00 2001 From: Alexander Ott <45203494+Nirus2000@users.noreply.github.com> Date: Thu, 7 Nov 2024 15:54:21 +0100 Subject: [PATCH] Modify 1822direct PDF-Importer to support new transaction (#4337) https://forum.portfolio-performance.info/t/pdf-import-von-1822direkt/984/42 --- .../Direkt1822BankPDFExtractorTest.java | 22 ++++++ .../pdf/direkt1822bank/Kontoauszug01.txt | 77 +++++++++++++++++++ .../pdf/Direkt1822BankPDFExtractor.java | 44 +++++++++++ 3 files changed, 143 insertions(+) create mode 100644 name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/direkt1822bank/Kontoauszug01.txt diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/direkt1822bank/Direkt1822BankPDFExtractorTest.java b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/direkt1822bank/Direkt1822BankPDFExtractorTest.java index 6a15b0bf44..216a138e85 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/direkt1822bank/Direkt1822BankPDFExtractorTest.java +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/direkt1822bank/Direkt1822BankPDFExtractorTest.java @@ -1,6 +1,7 @@ package name.abuchen.portfolio.datatransfer.pdf.direkt1822bank; import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.check; +import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.deposit; import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.dividend; import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasAmount; import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasCurrencyCode; @@ -780,4 +781,25 @@ public void testDepoteinlieferung01() hasAmount("EUR", 0.00), hasGrossValue("EUR", 0.00), // hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))))); } + + @Test + public void testKontoauszug01() + { + Direkt1822BankPDFExtractor extractor = new Direkt1822BankPDFExtractor(new Client()); + + List errors = new ArrayList<>(); + + List results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kontoauszug01.txt"), errors); + + assertThat(errors, empty()); + assertThat(countSecurities(results), is(0L)); + assertThat(countBuySell(results), is(0L)); + assertThat(countAccountTransactions(results), is(1L)); + assertThat(results.size(), is(1)); + new AssertImportActions().check(results, CurrencyUnit.EUR); + + // assert transaction + assertThat(results, hasItem(deposit(hasDate("2024-10-17"), hasAmount("EUR", 1000.00), // + hasSource("Kontoauszug01.txt"), hasNote("Gutschrift (Überweisung)")))); + } } diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/direkt1822bank/Kontoauszug01.txt b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/direkt1822bank/Kontoauszug01.txt new file mode 100644 index 0000000000..81f7d53975 --- /dev/null +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/datatransfer/pdf/direkt1822bank/Kontoauszug01.txt @@ -0,0 +1,77 @@ +PDFBox Version: 1.8.17 +Portfolio Performance Version: 0.71.2 +----------------------------------------- +1822direkt Monatlicher Kontoauszug Seite 1 +Kundennummer 2354224 BIC HELADEF1822 +kein Freistellungsauftrag +Herr Max Mustermann (Inhaber) +Kontoauszug Oktober 2024 +IBAN Bezeichnung Endsaldo +A DE22384900000023774324 1822direkt Tagesgeldkonto +1.000,00 €* +Gesamtsaldo +1.000,00 €* +Bitte beachten Sie auch die Hinweise auf der letzten Seite. +* Der angegebene Kontostand berücksichtigt nicht die Wertstellung der einzelnen Buchungen. 1822direkt +Dies bedeutet, dass der genannte Betrag nicht dem für die Zinsberechnung maßgeblichen Kon- Gesellschaft der +tostand entsprechen muss und bei Verfügungen möglicherweise Zinsen für die Inanspruchnah- Frankfurter Sparkasse mbHBorsigallee 19 +me einer eingeräumten oder geduldeten Kontoüberziehung anfallen können. 60388 Frankfurt am Main +Postanschrift +1822direkt +Entdecken Sie die beliebtesten Fonds & ETFs unserer Kunden mit dem 1822direkt 60608 Frankfurt am Main +Anlage-Kompass. Mehr erfahren Geschäftsführer: +Wolfgang Degenkolb (Sprecher) +Norbert Mittelstädt +Aufsichtsratsvorsitzender: +Dr. Sven Matthiesen +Amtsgericht +Frankfurt am Main +Handelsregister: HRB 41799 +www.1822direkt.de/kontakt +BIC HELADEF1822 +www.1822direkt.de +1822direkt Kontoauszug Oktober 2024 — Konto DE22384900000023774324 Seite 2 +A: 1822direkt Tagesgeldkonto, IBAN DE22384900000023774324 +Referenzkonto: DE27482900000028462832 Umsätze vom 01.10.2024 bis 31.10.2024 +Buchung Vorgang Auftraggeber / Empfänger Umsatz +Wertstellung Kto. Auftraggeber/Empfänger Verwendungszweck +Anfangssaldo vom 01.10.2024 +0,00 €* +17.10.2024 Gutschrift Überw. Max Mustermann +1.000,00€ +17.10.2024 DE27482900000028462832 TG1 +Endsaldo vom 31.10.2024 +1.000,00 €* +* Der angegebene Kontostand berücksichtigt nicht die Wertstellung der einzelnen Buchungen. Dies bedeutet, dass +der genannte Betrag nicht dem für die Zinsberechnungmaßgeblichen Kontostand entsprechen muss und bei Verfü- +gungen möglicherweise Zinsen für die Inanspruchnahme einer eingeräumten oder geduldeten Kontoüberziehung +anfallen können. +1822direkt Kontoauszug Oktober 2024 Seite 3 +• Einwendungen gegen den Kontoauszug teilen Sie uns bitte unverzüglich mit. +• Abrechnungsabschlüsse gelten als genehmigt, sofern Sie innerhalb von sechs Wochen +nach Zugang keine Einwendungen erheben. Einwendungen gegen Rechnungsabschlüsse +müssen der 1822direkt zugehen. Zur Fristwahrung genügt die rechtzeitige Absendung +(Nr. 7 Abs. 3 unserer Allgemeinen Geschäftsbedingungen). +• Der angegebene Kontostand berücksichtigt nicht die Wertstellung der einzelnen Buchun- +gen. Dies bedeutet, dass der genannte Betrag nicht dem für die Zinsrechnung maßgebli- +chen Kontostand entsprechen muss und bei Verfügungen möglicherweise Zinsen für die +Inanspruchnahme einer eingeräumten oder geduldeten Kontoüberziehung anfallen kön- +nen. +• Gutschriften aus eingereichten Schecks, Lastschriften und anderen Einzugspapieren erfol- +gen unter dem Vorbehalt der Einlösung. +• Dieser Kontoauszug gilt im Zusammenhang mit den zugrunde liegenden Verträgen laut +angegebener Kontonummer als Rechnung im Sinne des UStG. Unsere Umsatzsteuer- +Ident Nummer: DE177283324. +Bitte beachten Sie: +Guthaben sind als Einlagen nach Maßgabe des Einlagensicherungsgesetzes entschädigungs- +fähig. Nähere Informationen können dem »Informationsbogen für den Einleger« entnommen +werden. +Mit freundlichen Grüßen +1822direkt +Postanschrift: +1822direkt +60608 Frankfurt am Main +Hausanschrift: +Borsigallee 19 +60388 Frankfurt am Main +Amtsgericht +Frankfurt am Main +Handelsregister: HRB41799 +www.1822direkt.de/kontakt +www.1822direkt.de +BIC: HELADEF1822 \ No newline at end of file diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/Direkt1822BankPDFExtractor.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/Direkt1822BankPDFExtractor.java index 8531823e2a..fde7663976 100644 --- a/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/Direkt1822BankPDFExtractor.java +++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/datatransfer/pdf/Direkt1822BankPDFExtractor.java @@ -20,6 +20,14 @@ import name.abuchen.portfolio.money.Money; import name.abuchen.portfolio.money.Values; +/** + * @formatter:off + * @implNote 1822direkt + * + * @implSpec The account statement transactions are reported in EUR. + * @formatter:on + */ + @SuppressWarnings("nls") public class Direkt1822BankPDFExtractor extends AbstractPDFExtractor { @@ -32,6 +40,7 @@ public Direkt1822BankPDFExtractor(Client client) addBuySellTransaction(); addDividendeTransaction(); addAdvanceTaxTransaction(); + addAccountStatementTransaction(); addNonImportableTransaction(); } @@ -309,6 +318,41 @@ private void addAdvanceTaxTransaction() .wrap(TransactionItem::new); } + private void addAccountStatementTransaction() + { + final DocumentType type = new DocumentType("Monatlicher Kontoauszug"); + this.addDocumentTyp(type); + + // @formatter:off + // 17.10.2024 Gutschrift Überw. Max Mustermann +1.000,00 + // @formatter:on + Block depositBlock = new Block("^[\\d]{2}\\.[\\d]{2}\\.[\\d]{4} Gutschrift .berw\\. .* \\+[\\.,\\d]+.*$"); + type.addBlock(depositBlock); + depositBlock.set(new Transaction() + + .subject(() -> { + AccountTransaction accountTransaction = new AccountTransaction(); + accountTransaction.setType(AccountTransaction.Type.DEPOSIT); + return accountTransaction; + }) + + .section("date", "note", "amount") // + .match("^(?[\\d]{2}\\.[\\d]{2}\\.[\\d]{4}) (?Gutschrift .berw\\.) .* \\+(?[\\.,\\d]+).*$") + .assign((t, v) -> { + t.setDateTime(asDate(v.get("date"))); + t.setAmount(asAmount(v.get("amount"))); + t.setCurrencyCode(asCurrencyCode("EUR")); + + // Formatting some notes + if ("Gutschrift Überw.".equals(v.get("note"))) + v.put("note", "Gutschrift (Überweisung)"); + + t.setNote(v.get("note")); + }) + + .wrap(TransactionItem::new)); + } + private void addNonImportableTransaction() { final DocumentType type = new DocumentType("Depotbuchung \\- Belastung"); //