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

Add new GLS Bank PDF-Importer #2379

Merged
merged 2 commits into from Aug 15, 2021
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,59 @@
PDF Autor: 'User'
PDFBox Version: 1.8.16
-----------------------------------------
GLS Bank · 44774 Bochum Seite 1
Depotnummer
XXXX
Kundennummer XXXX
XXXX
Abrechnungsnr. 66008994320
XXXX Datum 09.06.2021
XXXX Ihr Berater Wertpapierservice
XXXX Telefon +49 234 5797 5100
Telefax +49 234 5797 5222

Dividendengutschrift
Nominale Wertpapierbezeichnung ISIN (WKN)
Stück 17 CD PROJEKT S.A. PLOPTTC00011 (534356)
INHABER-AKTIEN C ZY 1
Zahlbarkeitstag 08.06.2021 Dividende pro Stück 5,00 PLN
Bestandsstichtag 28.05.2021 Herkunftsland Polen
Ex-Tag 31.05.2021
Geschäftsjahr 01.01.2020 - 31.12.2020
Devisenkurs EUR / PLN 4,5044
Devisenkursdatum 09.06.2021
Dividendengutschrift 85,00 PLN 18,87+ EUR
Umrechnung in EUR 18,87 EUR
Einbehaltene Quellensteuer 19 % auf 85,00 PLN 3,59- EUR
Anrechenbare Quellensteuer 15 % auf 18,87 EUR 2,83 EUR
Kapitalertragsteuerpflichtige Dividende 18,87 EUR
Verrechnete anrechenbare ausländische Quellensteuer
(Verhältnis 100/25) auf 2,83 EUR 11,32 - EUR
Berechnungsgrundlage für die Kapitalertragsteuer 7,55 EUR
Kapitalertragsteuer 25 % auf 7,55 EUR 1,89- EUR
Solidaritätszuschlag 5,5 % auf 1,89 EUR 0,11- EUR
Ausmachender Betrag 13,28+ EUR
4 % rückforderbare Quellensteuer 3,40 PLN
Lagerstelle CBFI (601617 / 67268)
Den Betrag buchen wir mit Wertstellung 10.06.2021 zu Gunsten des Kontos XXXX (IBAN DE88 4306 0967 1154
3650 00), BLZ 430 609 67 (BIC GENODEM1GLS).
Bitte ggf. Rückseite beachten.
7657.06100100.0000041ER01

Seite 2
Depotnummer XXXX
Kundennummer XXXX
Abrechnungsnr. 66008994320
Datum 09.06.2021
Keine Steuerbescheinigung.
Nachrichtlich die Übersicht Ihrer Verrechnungs- und Steuertopfsalden zum Zeitpunkt der Erstellung der Abrechnung.
Verrechnungstöpfe 2021 Berechnungsgrundlage
der gezahlten Steuern
Euro Aktien Sonstige Sparer- anrechenbare Aktien und Sonstige
Pauschbetrag Quellensteuer
Vorher 0,00 0,00 0,00 0,00 50,16
Ertrag 2,83
0,00 0,00 0,00 2,83- 7,55
Nachher 0,00 0,00 0,00 0,00 57,71
Dieses Dokument wurde maschinell erstellt und wird nicht unterschrieben.
7657.06100100.0000042ER01
@@ -0,0 +1,43 @@
PDF Autor: 'User'
PDFBox Version: 1.8.16
-----------------------------------------

GLS Bank · 44774 Bochum
Depotnummer
XXXXXXX
Kundennummer XXXXXX
XXXXXXXXXX
Auftragsnummer 686698/69.00
XXXXXXXX Datum 17.02.2021
XXXXX Ihr Berater Wertpapierservice
XXXX XXXX Telefon +49 234 5797 5100
Telefax +49 234 5797 5222
Rechnungsnummer W07657-0000007984/21
Umsatzsteuer-ID DE124090847

Wertpapier Abrechnung Kauf
Auftrag vom 16.02.2021 20:08:58 Uhr
Nominale Wertpapierbezeichnung ISIN (WKN)
Stück 2.700 INTERNAT. CONS. AIRL. GROUP SA ES0177542018 (A1H6AJ)
ACCIONES NOM. EO -,10
Handels-/Ausführungsplatz XETRA (gemäß Weisung)
Börsensegment XETB
Market-Order
Limit billigst
Schlusstag/-Zeit 17.02.2021 09:04:10 Auftraggeber Max Mustermann
Ausführungskurs 1,8695 EUR Auftragserteilung/ -ort Online-Banking
Girosammelverw. mehrere Sammelurkunden - kein Stückeausdruck -
Kurswert 5.047,65- EUR
Provision 1,0000 % vom Kurswert 50,48- EUR
Transaktionsentgelt Börse 0,71- EUR
Übertragungs-/Liefergebühr 0,07- EUR
Finanztransaktionssteuer 10,10- EUR
Ausmachender Betrag 5.109,01- EUR

Den Gegenwert buchen wir mit Valuta 19.02.2021 zu Lasten des Kontos XXXXX
(IBAN DE88 4306 0967 XXXXX), BLZ 43060967 (BIC GENODEM1GLS).
Die Wertpapiere schreiben wir Ihrem Depotkonto gut.
Sofern keine Umsatzsteuer ausgewiesen ist, handelt es sich um eine umsatzsteuerbefreite Finanzdienstleistung.

Dieses Dokument wurde maschinell erstellt und wird nicht unterschrieben.
7657.02171751.0000041OR07
@@ -0,0 +1,111 @@
package name.abuchen.portfolio.datatransfer.pdf.glsbankengemeinschaft;

import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.collection.IsEmptyCollection.empty;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import org.junit.Test;

import name.abuchen.portfolio.datatransfer.Extractor.BuySellEntryItem;
import name.abuchen.portfolio.datatransfer.Extractor.Item;
import name.abuchen.portfolio.datatransfer.Extractor.SecurityItem;
import name.abuchen.portfolio.datatransfer.Extractor.TransactionItem;
import name.abuchen.portfolio.datatransfer.actions.AssertImportActions;
import name.abuchen.portfolio.datatransfer.pdf.GLSBankengemeinschaftPDFExtractor;
import name.abuchen.portfolio.datatransfer.pdf.PDFInputFile;
import name.abuchen.portfolio.model.AccountTransaction;
import name.abuchen.portfolio.model.BuySellEntry;
import name.abuchen.portfolio.model.Client;
import name.abuchen.portfolio.model.PortfolioTransaction;
import name.abuchen.portfolio.model.Security;
import name.abuchen.portfolio.model.Transaction.Unit;
import name.abuchen.portfolio.money.CurrencyUnit;
import name.abuchen.portfolio.money.Money;
import name.abuchen.portfolio.money.Values;

@SuppressWarnings("nls")
public class glsbankengemeinschaftPDFExtractorTest
{
@Test
public void testWertpapierKauf01()
{
GLSBankengemeinschaftPDFExtractor extractor = new GLSBankengemeinschaftPDFExtractor(new Client());

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

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

assertThat(errors, empty());
assertThat(results.size(), is(2));
new AssertImportActions().check(results, CurrencyUnit.EUR);

// check security
Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst()
.orElseThrow(IllegalArgumentException::new).getSecurity();
assertThat(security.getIsin(), is("ES0177542018"));
assertThat(security.getWkn(), is("A1H6AJ"));
assertThat(security.getName(), is("INTERNAT. CONS. AIRL. GROUP SA ACCIONES NOM. EO -,10"));
assertThat(security.getCurrencyCode(), is(CurrencyUnit.EUR));

// check buy sell transaction
BuySellEntry entry = (BuySellEntry) results.stream().filter(i -> i instanceof BuySellEntryItem)
.collect(Collectors.toList()).get(0).getSubject();

assertThat(entry.getPortfolioTransaction().getType(), is(PortfolioTransaction.Type.BUY));
assertThat(entry.getAccountTransaction().getType(), is(AccountTransaction.Type.BUY));

assertThat(entry.getPortfolioTransaction().getDateTime(), is(LocalDateTime.parse("2021-02-17T09:04:10")));
assertThat(entry.getPortfolioTransaction().getShares(), is(Values.Share.factorize(2700)));

assertThat(entry.getPortfolioTransaction().getMonetaryAmount(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(5109.01))));
assertThat(entry.getPortfolioTransaction().getGrossValue(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(5047.65))));
assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.TAX),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(10.10))));
assertThat(entry.getPortfolioTransaction().getUnitSum(Unit.Type.FEE),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(50.48 + 0.71 + 0.07))));
}

@Test
public void testWertpapierDividende01()
{
GLSBankengemeinschaftPDFExtractor extractor = new GLSBankengemeinschaftPDFExtractor(new Client());

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

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

assertThat(errors, empty());
assertThat(results.size(), is(2));
new AssertImportActions().check(results, CurrencyUnit.EUR);

// check security
Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst()
.orElseThrow(IllegalArgumentException::new).getSecurity();
assertThat(security.getIsin(), is("PLOPTTC00011"));
assertThat(security.getWkn(), is("534356"));
assertThat(security.getName(), is("CD PROJEKT S.A. INHABER-AKTIEN C ZY 1"));

// check dividends transaction
AccountTransaction transaction = (AccountTransaction) results.stream().filter(i -> i instanceof TransactionItem)
.findFirst().orElseThrow(IllegalArgumentException::new).getSubject();

assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2021-05-31T00:00")));
assertThat(transaction.getShares(), is(Values.Share.factorize(17)));
assertThat(transaction.getMonetaryAmount(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(13.28))));
assertThat(transaction.getGrossValue(),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(18.87))));
assertThat(transaction.getUnitSum(Unit.Type.TAX),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(3.59 + 1.89 + 0.11))));
assertThat(transaction.getUnitSum(Unit.Type.FEE),
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(0.00))));
}
}