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

adding support for Ginmon VL Sparen #4379

Merged
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package name.abuchen.portfolio.datatransfer.pdf.dab;

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.fee;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasAmount;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasCurrencyCode;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasDate;
Expand All @@ -18,6 +20,8 @@
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.hasWkn;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.inboundDelivery;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.outboundDelivery;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.purchase;
import static name.abuchen.portfolio.datatransfer.ExtractorMatchers.removal;
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 @@ -799,6 +803,37 @@ public void testWertpapierKauf13()
is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(10.00))));
}

@Test
public void testWertpapierKauf14()
{
DABPDFExtractor extractor = new DABPDFExtractor(new Client());

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

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kauf14.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("IE00BCBJG560"), hasWkn(null), hasTicker(null), //
hasName("SPDR MSCI Wrld Small Cap U.ETF Registered Shares o.N."), //
hasCurrencyCode("EUR"))));

// check buy sell transaction
assertThat(results, hasItem(purchase( //
hasDate("2024-08-29T12:59:00"), hasShares(0.0425), //
hasSource("Kauf14.txt"), //
hasNote("Abrechnungs-Nr. 92328727"), //
hasAmount("EUR", 4.13), hasGrossValue("EUR", 4.13), //
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))));
}

@Test
public void testWertpapierVerkauf01()
{
Expand Down Expand Up @@ -1702,6 +1737,37 @@ public void testWertpapierVerkauf13()
hasTaxes("EUR", 100.00 + 10.00 + 10.00), hasFees("EUR", 0.00))));
}

@Test
public void testWertpapierVerkauf14()
{
DABPDFExtractor extractor = new DABPDFExtractor(new Client());

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

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Verkauf14.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("IE00BL25JM42"), hasWkn(null), hasTicker(null), //
hasName("Xtr.(IE) - MSCI World Value Registered Shares 1C USD o.N."), //
hasCurrencyCode("EUR"))));

// check buy sell transaction
assertThat(results, hasItem(sale( //
hasDate("2024-11-07T16:00"), hasShares(0.2741), //
hasSource("Verkauf14.txt"), //
hasNote("Abrechnungs-Nr. 64518224"), //
hasAmount("EUR", 11.60), hasGrossValue("EUR", 11.67), //
hasTaxes("EUR", 0.07), hasFees("EUR", 0.00))));
}

@Test
public void testMultipleWertpapierKaufVerkauf01()
{
Expand Down Expand Up @@ -3648,4 +3714,148 @@ public void testKontoumsaetze07()
assertThat(transaction.getSource(), is("Kontoumsaetze07.txt"));
assertThat(transaction.getNote(), is("Porto"));
}

@Test
public void testKontoumsaetze08()
{
DABPDFExtractor extractor = new DABPDFExtractor(new Client());

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

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kontoumsaetze08.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-08-28"), hasAmount("EUR", 26.59), //
hasSource("Kontoumsaetze08.txt"), hasNote("vermögenswirksame Leistung"))));
}

@Test
public void testKontoumsaetze09()
{
DABPDFExtractor extractor = new DABPDFExtractor(new Client());

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

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kontoumsaetze09.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(fee(hasDate("2024-10-09"), hasAmount("EUR", 0.02), //
hasSource("Kontoumsaetze09.txt"), hasNote("Ginmon Gebuehrenrechnung September 2024"))));
}

@Test
public void testKontoumsaetze10()
{
DABPDFExtractor extractor = new DABPDFExtractor(new Client());

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

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kontoumsaetze10.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(removal(hasDate("2024-11-11"), hasAmount("EUR", 50.00), //
hasSource("Kontoumsaetze10.txt"), hasNote("SEPA-Überweisung"))));
}

@Test
public void testKontoumsaetze11()
{
DABPDFExtractor extractor = new DABPDFExtractor(new Client());

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

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kontoumsaetze11.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("IE00B52MJY50"), hasWkn(null), hasTicker(null), //
hasName(null), //
hasCurrencyCode("EUR"))));

// assert transaction
assertThat(results, hasItem(withFailureMessage( //
Messages.MsgErrorTransactionAlternativeDocumentRequired,
sale(hasDate("2024-11-11"), hasAmount("EUR", 0.49), hasShares(0.003), //
hasSource("Kontoumsaetze11.txt"), hasNote(null)))));
}

@Test
public void testKontoumsaetze12()
{
DABPDFExtractor extractor = new DABPDFExtractor(new Client());

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

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "Kontoumsaetze12.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("IE00BL25JM42"), hasWkn(null), hasTicker(null), //
hasName(null), //
hasCurrencyCode("EUR"))));

// assert transaction
assertThat(results, hasItem(withFailureMessage( //
Messages.MsgErrorTransactionAlternativeDocumentRequired,
purchase(hasDate("2024-10-01"), hasAmount("EUR", 6.26), hasShares(0.15), //
hasSource("Kontoumsaetze12.txt"), hasNote(null)))));
}

@Test
public void testFeeInvoice01()
{
DABPDFExtractor extractor = new DABPDFExtractor(new Client());

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

List<Item> results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "FeeInvoice01.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(withFailureMessage( //
Messages.MsgErrorTransactionAlternativeDocumentRequired,
fee(hasDate("2024-10-31"), hasAmount("EUR", 0.04), //
hasSource("FeeInvoice01.txt"), hasNote(null)))));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
```
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.72.2
-----------------------------------------
Ginmon Vermögensverwaltung GmbH, Mainzer Landstraße 33a, 60329 Frankfurt am Main
Herr
Vorname Nachname
Straße 1
12345 Ort
Deutschland
Rechnungsdatum / Invoice date: 31.10.2024
Rechnungsnummer /Invoice no: 00000002024101
Kundennummer /Customer ID: GM0000000
Gebührenabrechnung Oktober
Invoice October
Zeitraum vom 01.10.2024 – 31.10.2024
Period of 01.10.2024 – 31.10.2024
Position Berechungsbasis Gebühr Betrag
Calculation Fee Amount
Grundgebühr 57.60 € 0.7500% p.a. 0.04 €
Base fee (Ø AuM in 31 Tagen / days)
Discount 0.00 €
Depotführung inklusive 0.00 €
Handling charge included
Transaktionskosten inklusive 0.00 €
Transaction fees included
MwSt. inkl. von 19% 0.01 €
VAT included of 19%
Rechnungsbetrag 0.04 €
Total amount
Der ausstehende Betrag wird in den kommenden Tagen automatisch aus Ihrem Ginmon Konto
entnommen. Sie müssen hierfür nichts weiter unternehmen.
The amount will automatically be deducted from your Ginmon account within the upcoming days. There
is no further action required on your side.
Ginmon GmbH Geschäftssitz Bankverbindung
Ginmon Vermögensverwaltung Geschäftsführer: Lars Reiner IBAN: DE66 7012 0400 2569 4200 09
Mainzer Landstraße 33a Amtsgericht: Frankfurt am Main BIC: DABBDEMMXXX
60329 Frankfurt am Main HRB 102248 / HRB 107290 DAB BNP Paribas
[email protected] USt-IdNr. DE298791666

```
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
```
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.72.2
-----------------------------------------
BELEGDRUCK=J
ORIGINAL=1
FAXVERSAND=N
EMAILVERSAND=N
DEPOTNUMMER=0000000000
Wertpapierabrechnung DEPOTUNTERBEZEICHNUNG=
VERSANDARTENSCHLUESSEL=DRUCK
ADRESSZEILE1=Herr
Kauf ADRESSZEILE2=Vorname Nachname
Kommissionsgeschäft ADRESSZEILE3=Straße 1
ADRESSZEILE4=12345 Ort
Depot-Nr. Abrechnungs-Nr. ADRESSZEILE5=
0000000000 92328727 / 29.08.2024 ADRESSZEILE6=
BELEGNUMMER=11349
Herr SEITENNUMMER=1
Vorname Nachname STEUERERSTATTUNG=N
Straße 1 Depotinhaber
12345 Ort Vorname Nachname
München, 29.08.2024
Wir haben für Sie gekauft
Gattungsbezeichnung ISIN
SPDR MSCI Wrld Small Cap U.ETF Registered Shares o.N. IE00BCBJG560
Nominal Kurs
STK 0,0425 EUR 97,1400
Handelstag 29.08.2024 Kurswert EUR 4,13-
Handelszeit 12:59*
Börse Tradegate/EDG
Verwahrart Wertpapierrechnung
Lagerland Irland
Wert Konto-Nr. Betrag zu Ihren Lasten
02.09.2024 0000000000 EUR 4,13
Die Höhe des von der KVG festgelegten Ausgabeauf- bzw. Rücknahmeabschlages sowie die jährlich zu zahlende Ver-
waltungsvergütung und die Gesamtkostenquote sind dem Verkaufsprospekt bzw. den Vertragsbedingungen zu entnehmen.
Aggregierte Order ggf. zum Mischkurs.
* Die angegebene Zeit entspricht den Angaben der Handelspartner gemäß der lokalen Zeit in Deutschland (Mitteleuropäische Zeit bzw. Mitteleuropäische Sommerzeit).
Widerrufsbelehrung für den Erwerb von Anteilen oder Aktien eines offenen Investmentvermögens: Ist der Käufer von Anteilen oder Aktien eines offenen Investmentvermögens
durch mündliche Verhandlungen außerhalb der ständigen Geschäftsräume desjenigen, der die Anteile oder Aktien verkauft oder den Verkauf vermittelt hat, dazu bestimmt worden,
eine auf den Kauf gerichtete Willenserklärung abzugeben, so ist er an diese Erklärung nur gebunden, wenn er sie nicht innerhalb einer Frist von zwei Wochen bei der
Verwaltungsgesellschaft oder einem Repräsentanten im Sinne des § 319 KAGB schriftlich widerruft.
Dieser Beleg wird maschinell erstellt und daher nicht unterschrieben.
BNP Paribas S.A. Niederlassung Deutschland > Standort: München > Landsberger Straße 300 > 80687 München > Postadresse: DAB BNP Paribas > Postfach 2547 >
90011 Nürnberg > Sitz: Nürnberg HRB Nürnberg 31129 > USt.-Ident-Nr.: DE191528929 > Sitz der Hauptniederlassung der BNP Paribas S.A.: 16, boulevard des Italiens
> 75009 Paris > Frankreich > Registergericht: R.C.S. Paris 662 042 449 > Président du Conseil d‘Administration: Jean Lemierre > Directeur Général: Jean-Laurent Bonnafé
3.19/ABREABHNHANDKF/GABAUFTL/011349/290824/210432

```
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
```
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.72.2
-----------------------------------------
Kontoauszug DAB Verrechnungskonto Kontonummer: 0000000000 KOPIE
BLZ: 701 204 00
IBAN: DE00000000000000000000
BIC (SWIFT-Code): DABBDEMMXXX
Vorname Nachname
Letzter Auszug Nr. 000 vom 00.00.0000
Umsatzzeitraum
Ginmon Vermögensverwaltung GmbH 28.08.2024 - 28.08.2024 Seite 1/1
Mainzer Landstr. 33a
60329 Frankfurt Auszug Nr. 001
28.08.2024
Buchung Valuta Buchungsinformation Soll Haben
00.00. Alter Kontostand: EUR 0,00+
28.08. 28.08. vermögenswirksame Leistung 26,59+
Company where VL is payed from 000/UVXY VL
Nachname, Vo.
28.08. Neuer Kontostand: EUR 26,59+
Hinweis
Der Kontostand /Saldo kann auch noch nicht wertgestellte Beträge enthalten, über die bis zur Wertstellung noch nicht ohne Abzug von Sollzinsen
verfügt werden kann.
Guthaben sind als Einlagen nach Maßgabe des Einlagensicherungsgesetztes entschädigungsfähig. Nähere Informationen können dem
„Informationsbogen für den Einleger“ entnommen werden.
BNP Paribas S.A. Niederlassung Deutschland > Standort: München > Landsberger Straße 300 > 80687 München > Postadresse: DAB BNP Paribas > Postfach 2547 >
90011 Nürnberg > Sitz: Nürnberg HRB Nürnberg 31129 > USt.-Ident-Nr.: DE 191528929 > Sitz der Hauptniederlassung der BNP Paribas S.A.: 16, boulevard des Italiens,
75009 Paris, Frankreich, Registergericht: R.C.S. Paris 662 042 449 > Président du Conseil d‘Administration: Jean Lemierre, Directeur Général: Jean-Laurent Bonnafé

```
Loading
Loading