Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
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
@@ -0,0 +1,30 @@
PDFBox Version: 3.0.6
Portfolio Performance Version: 0.81.5
System: macosx | aarch64 | 21.0.5+11-LTS | Azul Systems, Inc.
-----------------------------------------
TRADE REPUBLIC BANK GMBH, SUCURSAL EN ESPAÑA C/ VELAZQUEZ 50 - PLANTA 5, MADRID 28001 - MADRID
ifFLn nJnuj ibPAjl
FECHA 01.01.2026
EyyNcq pYh de la rPrUUU 380- ag 5
CUENTA DE EFECTIVO 0478962611
00000 Zamora
INFORME DE INTERESES
a fecha 31.12.2025
RESUMEN
ACTIVOS TIPO DE INGRESO INTERÉS FECHA TOTAL
Efectivo Interés 2,00% 01.12.2025 - 31.12.2025 77,42 EUR
Total 77,42 EUR
JUSTIFICANTE - INTERÉS
POSICIÓN CANTIDAD
Base imponible 77,42 EUR
Retención IRPF -14,71 EUR
Total 62,71 EUR
CONTABILIDAD
IBAN FECHA DE EFECTO CRÉDITO DESPUÉS DE IMPUESTOS
Ee7185932018829118828273 01.01.2026 62,71 EUR
Trade Republic Bank GmbH, Sucursal en España www.traderepublic.es Domicilio social: Trade Republic Bank GmbH Directores generales
C/ Velazquez 50 - Planta 5 NIF-IVA DE307510626 Brunnenstrasse 19-21, 10119 Berlín, Alemania Andreas Torner
28001, Madrid, Madrid Registrada en el Registro Mercantil del juzgado local de Gernot Mittendorfer
NIF: W0322893I Charlottenburg con el número HRB 244347 B, Alemania Christian Hecker
Thomas Pischke
Creado en 1 ene 2026, 12:13:15 Página 1 de 1
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
PDFBox Version: 3.0.6
Portfolio Performance Version: 0.81.5
System: macosx | aarch64 | 21.0.5+11-LTS | Azul Systems, Inc.
-----------------------------------------
TRADE REPUBLIC BANK GMBH, SUCURSAL EN ESPAÑA C/ VELAZQUEZ 50 - PLANTA 5, MADRID 28001 - MADRID
FtrrS CRnoW NNootb PÁGINA 1 de 1
LtLkSE pmL de la jLJLsu 819- SA 8 FECHA 02.02.2026
94157 OZrBJRMkE EJECUCIÓN 44a4-10f3
SAVEBACK 9a96-8457
CUENTA DE VALORES 0478962602
LIQUIDACIÓN DE VALORES EN SAVEBACK
DESCRIPCIÓN
Ejecución del Saveback el 02.02.2026 en Lang und Schwarz Exchange.
La contrapartida de la transacción es Lang & Schwarz TradeCenter AG & Co. KG.
POSICIÓN CANTIDAD COTIZACIÓN PROMEDIO IMPORTE
FTSE All-World USD (Acc) 0,761108 7,292 EUR 5,55 EUR
ISIN: IE000716YHJ7
TOTAL 5,55 EUR
RESERVA
CUENTA DE EFECTIVO FECHA VALOR IMPORTE
gc4509555062007729324536 2026-02-04 -5,55 EUR
FTSE All-World USD (Acc) en custodia no colectiva segura
Este documento se ha creado automáticamente y por lo tanto no necesita firma.
Si no se indica IVA, se trata de un servicio libre de IVA según § 4 núm. 8 UStG.
Trade Republic Bank GmbH, Sucursal en España www.traderepublic.es Domicilio social: Trade Republic Bank GmbH Directores generales
C/ Velazquez 50 - Planta 5 NIF-IVA DE307510626 Brunnenstrasse 19-21, 10119 Berlín, Alemania Andreas Torner
28001, Madrid, Madrid Registrada en el Registro Mercantil del juzgado local de Gernot Mittendorfer
NIF: W0322893I Charlottenburg con el número HRB 244347 B, Alemania Christian Hecker
Thomas Pischke
Original file line number Diff line number Diff line change
Expand Up @@ -11517,4 +11517,101 @@ public void testExAnte03()
hasAmount("EUR", 1.00), hasGrossValue("EUR", 1.00), //
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))));
}

@Test
public void testTransaccionesDeCuenta10()
{
var extractor = new TradeRepublicPDFExtractor(new Client());

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

var results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "TransaccionesDeCuenta10.txt"), errors);

assertThat(errors, empty());
assertThat(countSecurities(results), is(0L));
assertThat(countBuySell(results), is(0L));
assertThat(countAccountTransactions(results), is(3L));
assertThat(countAccountTransfers(results), is(0L));
assertThat(countItemsWithFailureMessage(results), is(0L));
assertThat(countSkippedItems(results), is(0L));
assertThat(results.size(), is(3));
new AssertImportActions().check(results, "EUR");

// assert transaction - Incoming transfer from without Transferencia prefix
assertThat(results, hasItem(deposit( //
hasDate("2026-01-14"), hasAmount("EUR", 25.00), //
hasSource("TransaccionesDeCuenta10.txt"), hasNote("Incoming transfer from gmjtlp XluEoyJqEV RhncI, S.L.(oN9903194352357816331388)"))));

// assert transaction - Incoming transfer from with Transferencia prefix (already working)
assertThat(results, hasItem(deposit( //
hasDate("2026-01-24"), hasAmount("EUR", 198.71), //
hasSource("TransaccionesDeCuenta10.txt"), hasNote("Incoming transfer from Mintos Marketplace AS (ep336651755135764039)"))));

// assert transaction - Incoming transfer from without Transferencia prefix
assertThat(results, hasItem(deposit( //
hasDate("2026-01-28"), hasAmount("EUR", 4552.63), //
hasSource("TransaccionesDeCuenta10.txt"), hasNote("Incoming transfer from XHRHmb rBwIZDBPIU EUWmk, S.L.(Cx5298127404899415340791)"))));
}

@Test
public void testInformeDeIntereses01()
{
var extractor = new TradeRepublicPDFExtractor(new Client());

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

var results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "InformeDeIntereses01.txt"), errors);

assertThat(errors, empty());
assertThat(countSecurities(results), is(0L));
assertThat(countBuySell(results), is(0L));
assertThat(countAccountTransactions(results), is(1L));
assertThat(countAccountTransfers(results), is(0L));
assertThat(countItemsWithFailureMessage(results), is(0L));
assertThat(countSkippedItems(results), is(0L));
assertThat(results.size(), is(1));
new AssertImportActions().check(results, "EUR");

// check interest transaction (net amount after IRPF withholding tax)
assertThat(results, hasItem(interest( //
hasDate("2026-01-01T00:00"), //
hasSource("InformeDeIntereses01.txt"), //
hasNote(null), //
hasAmount("EUR", 62.71), hasGrossValue("EUR", 77.42), //
hasTaxes("EUR", 14.71), hasFees("EUR", 0.00))));
}

@Test
public void testLiquidacionDeValoresSaveback01()
{
var extractor = new TradeRepublicPDFExtractor(new Client());

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

var results = extractor.extract(PDFInputFile.loadTestCase(getClass(), "LiquidacionDeValoresSaveback01.txt"), errors);

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

// check security
assertThat(results, hasItem(security( //
hasIsin("IE000716YHJ7"), hasWkn(null), hasTicker(null), //
hasName("FTSE All-World USD (Acc)"), //
hasCurrencyCode("EUR"))));

// check buy transaction
assertThat(results, hasItem(purchase( //
hasDate("2026-02-02T00:00"), hasShares(0.761108), //
hasSource("LiquidacionDeValoresSaveback01.txt"), //
hasNote("Saveback: 9a96-8457 | Ejecución: 44a4-10f3"), //
hasAmount("EUR", 5.55), hasGrossValue("EUR", 5.55), //
hasTaxes("EUR", 0.00), hasFees("EUR", 0.00))));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
PDFBox Version: 3.0.6
Portfolio Performance Version: 0.81.5
System: macosx | aarch64 | 21.0.5+11-LTS | Azul Systems, Inc.
-----------------------------------------
TRADE REPUBLIC BANK GMBH, SUCURSAL EN ESPAÑA C/ VELAZQUEZ 50 - PLANTA 5, MADRID 28001 - MADRID
gYeRC Kiwas AjNSqo FECHA 01 ene 2026 - 31 ene 2026
IiuQWJ fbm de la xqiulw 190- YD 5 IBAN ji0759048194506644417252
83916 KYgbXVQYT BIC TRBKESM2XXX
RESUMEN DE ESTADO DE CUENTA
PRODUCTO BALANCE INICIAL ENTRADA DE DINERO SALIDA DE DINERO BALANCE FINAL
Cuenta corriente 7.268,20 € 6.170,97 € 4.613,62 € 8.825,55 €
TRANSACCIONES DE CUENTA
FECHA TIPO DESCRIPCIÓN ENTRADA DE SALIDA DE BALANCE
DINERO DINERO
14 ene Incoming transfer from gmjtlp XluEoyJqEV RhncI, S.L.
Transferencia 25,00 € 6.101,63 €
2026 (oN9903194352357816331388)
24 ene
Transferencia Incoming transfer from Mintos Marketplace AS (ep336651755135764039) 198,71 € 5.790,89 €
2026
28 ene Incoming transfer from XHRHmb rBwIZDBPIU EUWmk, S.L.
Transferencia 4.552,63 € 8.850,72 €
2026 (Cx5298127404899415340791)
Trade Republic Bank GmbH, Sucursal en España www.traderepublic.es Domicilio social: Trade Republic Bank GmbH Directores generales
C/ Velazquez 50 - Planta 5 NIF-IVA DE307510626 Brunnenstrasse 19-21, 10119 Berlín, Alemania Andreas Torner
28001, Madrid, Madrid Registrada en el Registro Mercantil del juzgado local de Gernot Mittendorfer
NIF: W0322893I Charlottenburg con el número HRB 244347 B, Alemania Christian Hecker
Thomas Pischke
Creado en 11 feb 2026, 16:42:26 Página 1 de 1
Original file line number Diff line number Diff line change
Expand Up @@ -427,10 +427,11 @@ private void addBuySellTransaction()
// @formatter:off
// Ausführung von Round up am 09.02.2024 an der Lang & Schwarz Exchange.
// Ausführung von Saveback am 04.03.2024 an der Lang & Schwarz Exchange.
// Ejecución del Saveback el 02.02.2026 en Lang und Schwarz Exchange.
// @formatter:on
section -> section //
.attributes("date") //
.match("^Ausf.hrung von (Round up|Saveback) .* "
.match("^(Ausf.hrung von (Round up|Saveback)|Ejecuci.n del Saveback) .* "
+ "(?<date>([\\d]{2}\\.[\\d]{2}\\.[\\d]{4}"
+ "|[\\d]{4}\\-[\\d]{2}\\-[\\d]{2})) .*$") //
.assign((t, v) -> t.setDate(asDate(v.get("date")))),
Expand Down Expand Up @@ -2622,11 +2623,15 @@ private void addAccountStatementTransaction_Format02()
// 02 Jan. Incoming transfer from Vorname Nachname
// Überweisung 50,00 € 361,83 €
// 2026 (DE00000000000000000000)
//
// 14 ene Incoming transfer from gmjtlp XluEoyJqEV RhncI, S.L.
// Transferencia 25,00 € 6.101,63 €
// 2026 (oN9903194352357816331388)
// @formatter:on
section -> section //
.attributes("date", "amount", "currency", "amountAfter", "currencyAfter", "note0", "year", "note1") //
.match("^(?<date>[\\d]{2} [\\p{L}]{3,4}([\\.]{1})?) (?<note0>(Incoming transfer from) .*)$") //
.match("^(.berweisung) (?<amount>[\\.,\\d]+) (?<currency>\\p{Sc}) (?<amountAfter>[\\.,\\d]+) (?<currencyAfter>\\p{Sc})$") //
.match("^(.berweisung|Transferencia) (?<amount>[\\.,\\d]+) (?<currency>\\p{Sc}) (?<amountAfter>[\\.,\\d]+) (?<currencyAfter>\\p{Sc})$") //
.match("^(?<year>[\\d]{4}) (?<note1>(.*))$") //
.assign((t, v) -> {
t.setType(AccountTransaction.Type.DEPOSIT);
Expand Down Expand Up @@ -3919,14 +3924,15 @@ private void addInterestStatementTransaction_Format02()
final var type = new DocumentType("(ABRECHNUNG ZINSEN" //
+ "|RESOCONTO INTERESSI MATURATI" //
+ "|INTEREST INVOICE" //
+ "|RAPPORT D.INT.R.TS)", //
+ "|RAPPORT D.INT.R.TS" //
+ "|INFORME DE INTERESES)", //
"Besteuerungsgrundlage");

this.addDocumentTyp(type);

var pdfTransaction = new Transaction<AccountTransaction>();

var firstRelevantLine = new Block("^(.BERSICHT|OVERVIEW|SYNTH.SE|PANORAMICA)$");
var firstRelevantLine = new Block("^(.BERSICHT|OVERVIEW|SYNTH.SE|PANORAMICA|RESUMEN)$");
type.addBlock(firstRelevantLine);
firstRelevantLine.set(pdfTransaction);

Expand Down Expand Up @@ -4475,10 +4481,11 @@ private void addBuySellTaxReturnBlock(DocumentType type)
// @formatter:off
// Ausführung von Round up am 09.02.2024 an der Lang & Schwarz Exchange.
// Ausführung von Saveback am 04.03.2024 an der Lang & Schwarz Exchange.
// Ejecución del Saveback el 02.02.2026 en Lang und Schwarz Exchange.
// @formatter:on
section -> section //
.attributes("date") //
.match("^Ausf.hrung von (Round up|Saveback) .* "
.match("^(Ausf.hrung von (Round up|Saveback)|Ejecuci.n del Saveback) .* "
+ "(?<date>([\\d]{2}\\.[\\d]{2}\\.[\\d]{4}"
+ "|[\\d]{4}\\-[\\d]{2}\\-[\\d]{2})) .*$") //
.assign((t, v) -> t.setDateTime(asDate(v.get("date")))),
Expand Down Expand Up @@ -5016,6 +5023,13 @@ private <T extends Transaction<?>> void addTaxesSectionsTransaction(T transactio
// @formatter:on
.section("tax", "currency").optional() //
.match("^Imp.t sur le revenu des personnes physiques (\\-)?(?<tax>[\\.,\\d]+) (?<currency>[A-Z]{3})$") //
.assign((t, v) -> processTaxEntries(t, v, type))

// @formatter:off
// Retención IRPF -14,71 EUR
// @formatter:on
.section("tax", "currency").optional() //
.match("^Retenci.n IRPF (\\-)?(?<tax>[\\.,\\d]+) (?<currency>[A-Z]{3})$") //
.assign((t, v) -> processTaxEntries(t, v, type));
}

Expand Down
Loading