Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Modify LGT Bank PDF-Importer to support new transactions #3438

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -0,0 +1,38 @@
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.64.1
-----------------------------------------
LGT Bank (Schweiz) AG
Glärnischstrasse 36, Postfach, CH-8027 Zürich
Tel. +41 44 250 81 81
lgt.ch@lgt.com, www.lgt.ch, BIC BLFLCHBB
CHE-109.346.830 MWST
____________________
P.P. Post CH AG_____C_H__-_8_0_2_7_ _Z_ü_r_ic_h_ PF 1909 A -PRIORITY_________________________________________________
Liberty Freizügigkeitsstiftung
bei Liberty Vorsorge AG
Postfach 733
6431 Schwyz 1 / 1
Zürich, 13. März 2023

Barausschüttung Portfolio: 1234567.000
Auftragsnummer: 200738771 Kontonummer: 1234567.031
Kunde: Liberty Freizügigkeitsstiftung XX - 1.2002.7067-01 IBAN: CH63 0833 9999 9999 9999 1

Stand Ihres Depots am 9. März 2023:
760 Novartis AG
Namen-Aktien
ISIN: CH0012005267, Valoren-Nr.: 1200526
Wir rechnen folgende Erträgnisse unter Eingangsvorbehalt ab:
Ausschüttung CHF 3.20
Ex-Datum 9. März 2023
Ausschüttungsart Ordentliche Dividende
Betrag CHF 2'432.00
Verrechnungssteuer 35 % CHF -851.20
Netto CHF 1'580.80
Zu Ihren Gunsten CHF 1'580.80
Valuta 13. März 2023
Grundsätzlich in der Schweiz rückforderbare Verrechnungssteuer:
CHF 851.20
2026457 00A T ZH I SEA0107 39509429 8:17 13.03.2023 %Media:XML-A4H
____
____
@@ -0,0 +1,44 @@
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.64.1
-----------------------------------------
LGT Bank (Schweiz) AG
Glärnischstrasse 36, Postfach, CH-8027 Zürich
Tel. +41 44 250 81 81
lgt.ch@lgt.com, www.lgt.ch, BIC BLFLCHBB
CHE-109.346.830 MWST
Securities dealer no. 647613
____________________
P.P. Post CH AGCH-8027 Zürich PF 1909 -PRIORITY
__________________________________________________A__________________
Liberty Freizügigkeitsstiftung
bei Liberty Vorsorge AG
Postfach 733
6431 Schwyz
1 / 1
Zürich, 29. Juni 2023

Abrechnung Kauf Portfolio: 1234567.000
Auftragsnummer: 210796978 Kundenportfolio
Kunde: Liberty Freizügigkeitsstiftung XX - 1.9009.5067-01
Titel iShares ETF (CH) - iShares SLI(R) ETF (CH)
Inhaber-Anteile -A-
Verwaltungsgesellschaft / AIFM BlackRock Asset Management Schweiz AG
ISIN CH0031768937
Valorennummer 3176893
Wertpapierkennnummer A0MW4N
Auftragserteilung 28.06.2023 17:34:14
Abschlussdatum 29.06.2023 14:54:02
Ausführungsplatz SIX Swiss Exchange, börslich
Auftragstyp Bestens
Anzahl 260 Stück
Kurs CHF 186.4056
Kurswert CHF 48'465.46
Eidg. Umsatzabgabe CHF 36.35
SIX Meldegebühr CHF 0.20
Belastung CHF Freizügigkeitskonto 2026457.031 CHF 48'502.01
Valuta 03.07.2023
Wir haben die Titel in das oben genannte Depot eingebucht.
Die Gutschrift im oben erwähnten Depot erfolgt vorbehaltlich der effektiven Lieferung.
2026457 00A T ZH I TRD1001 39509429 16:11 29.06.2023 %Media:XML-A4H
____
____
@@ -0,0 +1,43 @@
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.64.1
-----------------------------------------
LGT Bank (Schweiz) AG
Glärnischstrasse 36, Postfach, CH-8027 Zürich
Tel. +41 44 250 81 81
lgt.ch@lgt.com, www.lgt.ch, BIC BLFLCHBB
CHE-109.346.830 MWST
Securities dealer no. 647613
____________________
P__.P.
Post CH AG
___C_H__-_8_0_2_7_ _Z_ü_r_ic_h_ PF 1909 -PRIORITY_______________________________A__________________
Liberty Freizügigkeitsstiftung
bei Liberty Vorsorge AG
Postfach 733
6431 Schwyz
1 / 1
Zürich, 9. Juni 2023

Abrechnung Zeichnung aus Emission Portfolio: 1234567.000
Auftragsnummer: 209174085 Kundenportfolio
Kunde: Liberty Freizügigkeitsstiftung MP - 9.9779.5107-01
Titel JPMorgan Funds SICAV - Emerging Markets Sustainable Equity
Fund
Namen-Anteile -C- / Class USD
Verwaltungsgesellschaft / AIFM JPMorgan Asset Management (Europe) S.a r.l.
ISIN LU2051469208
Valorennummer 50139326
Auftragserteilung 07.06.2023 15:59:06
Zeichnungstag (NAV) 08.06.2023
Ausführungsplatz OTC
Anzahl 480 Stück
Kurs USD 105.25
Kurswert USD 50'520.00
Eidg. Umsatzabgabe USD 75.78
Belastung USD Konto 2026457.055 USD 50'595.78
Valuta 13.06.2023
Wir haben die Titel in das oben genannte Depot eingebucht.
Die Gutschrift im oben erwähnten Depot erfolgt vorbehaltlich der effektiven Lieferung.
2026457 00A T ZH I TRD1001 39509429 2:09 09.06.2023 %Media:XML-A4H
____
____
@@ -1,10 +1,32 @@
package name.abuchen.portfolio.datatransfer.pdf.lgtbank;

import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countAccountTransactions;
import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countBuySell;
import static name.abuchen.portfolio.datatransfer.ExtractorTestUtilities.countSecurities;
import static org.hamcrest.CoreMatchers.hasItem;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.collection.IsEmptyCollection.empty;
import static org.junit.Assert.assertNull;

import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.dividend;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasAmount;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasCurrencyCode;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasDate;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasFees;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasGrossValue;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasIsin;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasName;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasNote;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasShares;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasSource;
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 java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -63,7 +85,7 @@ public void testWertpapierKauf01()
assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2020-04-14T09:00:02")));
assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(12)));
assertThat(entry.getSource(), is("Kauf01.txt"));
assertThat(entry.getNote(), is("Valorennummer 906020"));
assertThat(entry.getNote(), is("Auftragsnummer: 262697612 | Valorennummer 906020"));

assertThat(entry.getPortfolioTransaction().getMonetaryAmount(),
is(Money.of("DKK", Values.Amount.factorize(82452.21))));
Expand Down Expand Up @@ -107,7 +129,7 @@ public void testWertpapierKauf02()
assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2020-04-14T09:00")));
assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(180)));
assertThat(entry.getSource(), is("Kauf02.txt"));
assertThat(entry.getNote(), is("Valorennummer 23159222"));
assertThat(entry.getNote(), is("Auftragsnummer: 323232609 | Valorennummer 23159222"));

assertThat(entry.getPortfolioTransaction().getMonetaryAmount(),
is(Money.of("DKK", Values.Amount.factorize(72811.75))));
Expand All @@ -119,6 +141,93 @@ public void testWertpapierKauf02()
is(Money.of("DKK", Values.Amount.factorize(1414.16 + 10.69))));
}

@Test
public void testWertpapierKauf03()
{
LGTBankPDFExtractor extractor = new LGTBankPDFExtractor(new Client());

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

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

assertThat(countSecurities(results), is(1L));
assertThat(countBuySell(results), is(1L));
assertThat(countAccountTransactions(results), is(0L));
assertThat(results.size(), is(2));
new AssertImportActions().check(results, "CHF");

// check security
assertThat(results, hasItem(security( //
hasIsin("CH0031768937"), hasWkn("A0MW4N"), hasTicker(null), //
hasName("iShares ETF (CH) - iShares SLI(R) ETF (CH) Inhaber-Anteile -A-"), //
hasCurrencyCode("CHF"))));

// check buy sell transaction
assertThat(results, hasItem(purchase( //
hasDate("2023-06-29T14:54:02"), hasShares(260), //
hasSource("Kauf03.txt"), hasNote("Auftragsnummer: 210796978 | Valorennummer 3176893"), //
hasAmount("CHF", 48502.01), hasGrossValue("CHF", 48465.46), //
hasTaxes("CHF", 36.35), hasFees("CHF", 0.20))));
}

@Test
public void testWertpapierKauf04()
{
LGTBankPDFExtractor extractor = new LGTBankPDFExtractor(new Client());

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

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

assertThat(countSecurities(results), is(1L));
assertThat(countBuySell(results), is(1L));
assertThat(countAccountTransactions(results), is(0L));
assertThat(results.size(), is(2));
new AssertImportActions().check(results, "USD");

// check security
assertThat(results, hasItem(security( //
hasIsin("LU2051469208"), hasWkn(null), hasTicker(null), //
hasName("JPMorgan Funds SICAV - Emerging Markets Sustainable Equity Fund"), //
hasCurrencyCode("USD"))));

// check buy sell transaction
assertThat(results, hasItem(purchase( //
hasDate("2023-06-08T00:00"), hasShares(480), //
hasSource("Kauf04.txt"), hasNote("Auftragsnummer: 209174085 | Valorennummer 50139326"), //
hasAmount("USD", 50595.78), hasGrossValue("USD", 50520.00), //
hasTaxes("USD", 75.78), hasFees("USD", 0.00))));
}

@Test
public void testWertpapierVerkauf01()
{
LGTBankPDFExtractor extractor = new LGTBankPDFExtractor(new Client());

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

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

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.USD);

// check security
assertThat(results, hasItem(security( //
hasIsin("IE00BZ02LR44"), hasWkn("A2AQST"), hasTicker(null), //
hasName("Xtrackers(IE)PLC - Xtrackers MSCI World ESG UCITS ETF Namen-Anteile -1C- / Class USD"), //
hasCurrencyCode("USD"))));

// check buy sell transaction
assertThat(results, hasItem(sale( //
hasDate("2023-06-08T11:22:14"), hasShares(260), //
hasSource("Verkauf01.txt"), hasNote("Auftragsnummer: 209179086 | Valorennummer 41359963"), //
hasAmount("USD", 8332.19), hasGrossValue("USD", 8344.70), //
hasTaxes("USD", 12.51), hasFees("USD", 0.00))));
}

@Test
public void testDividende01()
{
Expand Down Expand Up @@ -161,4 +270,33 @@ public void testDividende01()
assertThat(transaction.getUnitSum(Unit.Type.FEE),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00))));
}

@Test
public void testDividende02()
{
LGTBankPDFExtractor extractor = new LGTBankPDFExtractor(new Client());

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

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

assertThat(countSecurities(results), is(1L));
assertThat(countBuySell(results), is(0L));
assertThat(countAccountTransactions(results), is(1L));
assertThat(results.size(), is(2));
new AssertImportActions().check(results, "CHF");

// check security
assertThat(results, hasItem(security( //
hasIsin("CH0012005267"), hasWkn("1200526"), hasTicker(null), //
hasName("Novartis AG Namen-Aktien"), //
hasCurrencyCode("CHF"))));

// check dividende transaction
assertThat(results, hasItem(dividend( //
hasDate("2023-03-13T00:00"), hasShares(760), //
hasSource("Dividende02.txt"), hasNote("Ordentliche Dividende"), //
hasAmount("CHF", 1580.80), hasGrossValue("CHF", 2432.00), //
hasTaxes("CHF", 851.20), hasFees("CHF", 0.00))));
}
}
@@ -0,0 +1,47 @@
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.64.1
-----------------------------------------
LGT Bank (Schweiz) AG
Glärnischstrasse 36, Postfach, CH-8027 Zürich
Tel. +41 44 250 81 81
lgt.ch@lgt.com, www.lgt.ch, BIC BLFLCHBB
CHE-109.346.830 MWST
Securities dealer no. 647613
____________________
P__.P__.
Post CH AG
CH-8027
________________________
Z_ü_r_____
ic_h_ PF 1909 A -PRIORITY_______________________________
Liberty Freizügigkeitsstiftung
bei Liberty Vorsorge AG
Postfach 733
6431 Schwyz
1 / 1
Zürich, 8. Juni 2023

Abrechnung Verkauf Portfolio: 1234567.000
Auftragsnummer: 209179086 Kundenportfolio
Kunde: Liberty Freizügigkeitsstiftung XX - 9.9119.6077-01
Titel Xtrackers(IE)PLC - Xtrackers MSCI World ESG UCITS ETF
Namen-Anteile -1C- / Class USD
Verwaltungsgesellschaft / AIFM DWS Investment S.A.
ISIN IE00BZ02LR44
Valorennummer 41359963
Wertpapierkennnummer A2AQST
Auftragserteilung 07.06.2023 18:43:24
Abschlussdatum 08.06.2023 11:22:14
Ausführungsplatz Tradeweb EU MTF
Auftragstyp Bestens
Anzahl 260 Stück
Kurs USD 32.095
Kurswert USD 8'344.70
Eidg. Umsatzabgabe USD -12.51
Gutschrift USD Konto 2026457.055 USD 8'332.19
Valuta 12.06.2023
Wir entnehmen die Titel Ihrem oben genannten Depot.
Die Gutschrift auf oben erwähntem Konto erfolgt vorbehaltlich des effektiven Zahlungseinganges.
2026457 00A T ZH I TRD1001 39509429 12:09 08.06.2023 %Media:XML-A4H
____
____