Skip to content

Commit

Permalink
Modify DADAT PDF-Importer to support new transaction
Browse files Browse the repository at this point in the history
https://forum.portfolio-performance.info/t/pdf-import-von-dadat/15684/58

replaceMultipleBlanks in security name
grab year in documentContext
  • Loading branch information
Nirus2000 authored and buchen committed Jan 20, 2024
1 parent 78a9b1a commit fbc387a
Show file tree
Hide file tree
Showing 4 changed files with 353 additions and 83 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasTaxes;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasTicker;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasWkn;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.purchase;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.sale;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.security;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.taxRefund;
Expand Down Expand Up @@ -104,6 +105,37 @@ public void testWertpapierKauf01()
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00))));
}

@Test
public void testWertpapierKauf02()
{
DADATBankenhausPDFExtractor extractor = new DADATBankenhausPDFExtractor(new Client());

List<Exception> errors = new ArrayList<>();

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf02.txt"), errors);

assertThat(errors, empty());
assertThat(countSecurities(results), is(1L));
assertThat(countBuySell(results), is(1L));
assertThat(countAccountTransactions(results), is(0L));
assertThat(results.size(), is(2));
new AssertImportActions().check(results, CurrencyUnit.EUR);

// check security
assertThat(results, hasItem(security( //
hasIsin("NL0011794037"), hasWkn(null), hasTicker(null), //
hasName("AHOLD DELHAIZE,KON.EO-,01"), //
hasCurrencyCode("EUR"))));

// check buy sell transaction
assertThat(results, hasItem(purchase( //
hasDate("2023-12-27T00:00"), hasShares(40.00), //
hasSource("Kauf02.txt"), //
hasNote(null), //
hasAmount("EUR", 1053.18), hasGrossValue("EUR", 1046.40), //
hasTaxes("EUR", 0.00), hasFees("EUR", 6.78))));
}

@Test
public void testWertpapierStornoVerkauf01()
{
Expand All @@ -123,7 +155,7 @@ public void testWertpapierStornoVerkauf01()
assertThat(security1.getIsin(), is("US00206R1023"));
assertNull(security1.getWkn());
assertNull(security1.getTickerSymbol());
assertThat(security1.getName(), is("AT + T INC. DL 1"));
assertThat(security1.getName(), is("AT + T INC. DL 1"));
assertThat(security1.getCurrencyCode(), is(CurrencyUnit.USD));

Security security2 = results.stream().filter(SecurityItem.class::isInstance).skip(1).findFirst()
Expand All @@ -139,15 +171,15 @@ public void testWertpapierStornoVerkauf01()
assertThat(security3.getIsin(), is("US5949181045"));
assertNull(security3.getWkn());
assertNull(security3.getTickerSymbol());
assertThat(security3.getName(), is("MICROSOFT DL-,00000625"));
assertThat(security3.getName(), is("MICROSOFT DL-,00000625"));
assertThat(security3.getCurrencyCode(), is(CurrencyUnit.USD));

Security security4 = results.stream().filter(SecurityItem.class::isInstance).skip(3).findFirst()
.orElseThrow(IllegalArgumentException::new).getSecurity();
assertThat(security4.getIsin(), is("US1912161007"));
assertNull(security4.getWkn());
assertNull(security4.getTickerSymbol());
assertThat(security4.getName(), is("COCA-COLA CO. DL-,25"));
assertThat(security4.getName(), is("COCA-COLA CO. DL-,25"));
assertThat(security4.getCurrencyCode(), is(CurrencyUnit.USD));

Security security5 = results.stream().filter(SecurityItem.class::isInstance).skip(4).findFirst()
Expand All @@ -171,7 +203,7 @@ public void testWertpapierStornoVerkauf01()
assertThat(security7.getIsin(), is("US4781601046"));
assertNull(security7.getWkn());
assertNull(security7.getTickerSymbol());
assertThat(security7.getName(), is("JOHNSON + JOHNSON DL 1"));
assertThat(security7.getName(), is("JOHNSON + JOHNSON DL 1"));
assertThat(security7.getCurrencyCode(), is(CurrencyUnit.USD));

// check 1st cancellation (Storno) transaction
Expand Down Expand Up @@ -507,7 +539,7 @@ public void testKontoauszug03()
assertThat(security.getIsin(), is("US2561631068"));
assertNull(security.getWkn());
assertNull(security.getTickerSymbol());
assertThat(security.getName(), is("DOCUSIGN INC DL-,0001"));
assertThat(security.getName(), is("DOCUSIGN INC DL-,0001"));
assertThat(security.getCurrencyCode(), is(CurrencyUnit.USD));

// check buy sell transaction
Expand Down Expand Up @@ -602,7 +634,7 @@ public void testKontoauszug04()
assertThat(security.getIsin(), is("US2561631068"));
assertNull(security.getWkn());
assertNull(security.getTickerSymbol());
assertThat(security.getName(), is("DOCUSIGN INC DL-,0001"));
assertThat(security.getName(), is("DOCUSIGN INC DL-,0001"));
assertThat(security.getCurrencyCode(), is(CurrencyUnit.USD));

// check buy sell transaction
Expand Down Expand Up @@ -740,7 +772,7 @@ public void testKontoauszug06()
assertThat(security1.getIsin(), is("US00206R1023"));
assertNull(security1.getWkn());
assertNull(security1.getTickerSymbol());
assertThat(security1.getName(), is("AT + T INC. DL 1"));
assertThat(security1.getName(), is("AT + T INC. DL 1"));
assertThat(security1.getCurrencyCode(), is(CurrencyUnit.USD));

Security security2 = results.stream().filter(i -> i instanceof SecurityItem).skip(1).findFirst()
Expand Down Expand Up @@ -1727,7 +1759,7 @@ public void testKontoauszug21()
assertThat(security2.getIsin(), is("US1667641005"));
assertNull(security2.getWkn());
assertNull(security2.getTickerSymbol());
assertThat(security2.getName(), is("CHEVRON CORP. DL-,75"));
assertThat(security2.getName(), is("CHEVRON CORP. DL-,75"));
assertThat(security2.getCurrencyCode(), is(CurrencyUnit.EUR));

// check 1st buy sell transaction
Expand Down Expand Up @@ -1950,12 +1982,12 @@ public void testKontoauszug25()
// check security
assertThat(results, hasItem(security( //
hasIsin("US00206R1023"), hasWkn(null), hasTicker(null), //
hasName("AT + T INC. DL 1"), //
hasName("AT + T INC. DL 1"), //
hasCurrencyCode("EUR"))));

assertThat(results, hasItem(security( //
hasIsin("US7672921050"), hasWkn(null), hasTicker(null), //
hasName("RIOT PLATFORMS DL-,001"), //
hasName("RIOT PLATFORMS DL-,001"), //
hasCurrencyCode("EUR"))));

assertThat(results, hasItem(security( //
Expand Down Expand Up @@ -2012,6 +2044,76 @@ public void testKontoauszug25()
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))));
}

@Test
public void testKontoauszug26()
{
DADATBankenhausPDFExtractor extractor = new DADATBankenhausPDFExtractor(new Client());

List<Exception> errors = new ArrayList<>();

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kontoauszug26.txt"), errors);

assertThat(errors, empty());
assertThat(countSecurities(results), is(1L));
assertThat(countBuySell(results), is(0L));
assertThat(countAccountTransactions(results), is(1L));
assertThat(results.size(), is(2));
new AssertImportActions().check(results, CurrencyUnit.EUR);

// check security
assertThat(results, hasItem(security( //
hasIsin("US7134481081"), hasWkn(null), hasTicker(null), //
hasName("PEPSICO INC. DL-,0166"), //
hasCurrencyCode("USD"))));

// check dividends transaction
assertThat(results, hasItem(dividend( //
hasDate("2024-01-09T00:00"), hasShares(55), //
hasSource("Kontoauszug26.txt"), //
hasNote(null), //
hasAmount("EUR", 45.97), hasGrossValue("EUR", 63.41), //
hasForexGrossValue("USD", 69.58), //
hasTaxes("EUR", (10.44 + 8.70) / 1.097300), hasFees("EUR", 0.00))));
}

@Test
public void testKontoauszug26WithSecurityInEUR()
{
Security security = new Security("PEPSICO INC. DL-,0166", CurrencyUnit.EUR);
security.setIsin("US7134481081");

Client client = new Client();
client.addSecurity(security);

DADATBankenhausPDFExtractor extractor = new DADATBankenhausPDFExtractor(client);

List<Exception> errors = new ArrayList<>();

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kontoauszug26.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);

// check dividends transaction
assertThat(results, hasItem(dividend( //
hasDate("2024-01-09T00:00"), hasShares(55), //
hasSource("Kontoauszug26.txt"), //
hasNote(null), //
hasAmount("EUR", 45.97), hasGrossValue("EUR", 63.41), //
hasTaxes("EUR", (10.44 + 8.70) / 1.097300), hasFees("EUR", 0.00), //
check(tx -> {
CheckCurrenciesAction c = new CheckCurrenciesAction();
Account account = new Account();
account.setCurrencyCode(CurrencyUnit.EUR);
Status s = c.process((AccountTransaction) tx, account);
assertThat(s, is(Status.OK_STATUS));
}))));
}

@Test
public void testWertpapierDividende01()
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.67.1
-----------------------------------------
sBUeWc diuaF Datum: 11.01.2024
ajWhS AsQWaFpAMrh 7/0
0086 PlpZ
Buchungsbestätigung
HBOp:
Kontoinhaber: AaiYDZ VpUtQ
Auf oben genanntem Konto wurde folgende Buchung vorgenommen:
Buchungsdatum: 27.12.2023
Betrag in EUR -1.053,18 Effekten
Verwendungszweck:
Kauf Depot 636036082/20231227-96207266
ISIN NL0011794037 AHOLD DELHAIZE,KON.EO-,01 40,00000 STK
Kurs 26,160000 Kurswert -1.046,40 EUR
DADAT Handelsspesen -6,78 EUR
Mit freundlichen Grüßen
Schelhammer Capital Bank AG
Wien
BIC BSSWATWW 11.01.2024 Schelhammer Capital Bank AG
Seite 1 von 1 Wien
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.67.1
-----------------------------------------
DADAT-Bank KONTOAUSZUG
Schelhammer Capital Bank AG vom 09.01.2024
99999
Kundennummer
Alter Saldo per 08.01.2024 45.452,58
Summe der Gutschriften 45,97
Summe der Lastschriften 0,00
Schelhammer, PF 1000, A-5021 Salzburg
Neuer Saldo zu Ihren Gunsten
Bv uuDwCN vYyzPvY EUR 99.888,55
NLGEHFRNxj 66/75
0064 Wien
Konto-Nr.: 63365073411 Bankleitzahl: 19190
Empfängerhinweis:
Datum Buchungstext Wert Betrag
09.01 Ertrag Depot 0450115847/10802351-84757305 05.01 45,97
ISIN US7134481081 PEPSICO INC. DL-,0166 55,00000 STK
Kurs 1,265000 Zinsen/Dividenden 69,58 USD
Quellensteuer -10,44 USD Auslands-KESt -8,70 USD
DevKurs 1,097300/5.1.2024
Neuer Saldo zu Ihren Gunsten 99.999,55
AT21 0699 9485 4579 5511 BSSWATWW 01 0002 1/1
IBAN BIC Filiale Auszug Blatt/Gesamt
R0042 27540 Doknr.: EK00-714-0919865102
Loading

0 comments on commit fbc387a

Please sign in to comment.