Skip to content
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.
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
Expand Up @@ -30,7 +30,7 @@ public void testKontoauszug01()
{
BondoraCapitalPDFExtractor extractor = new BondoraCapitalPDFExtractor(new Client());

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

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

Expand Down Expand Up @@ -84,7 +84,7 @@ public void testKontoauszug02()
{
BondoraCapitalPDFExtractor extractor = new BondoraCapitalPDFExtractor(new Client());

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

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

Expand Down Expand Up @@ -148,7 +148,7 @@ public void testKontoauszug03()
{
BondoraCapitalPDFExtractor extractor = new BondoraCapitalPDFExtractor(new Client());

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

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

Expand Down Expand Up @@ -200,7 +200,7 @@ public void testKontoauszug04()
{
BondoraCapitalPDFExtractor extractor = new BondoraCapitalPDFExtractor(new Client());

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

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

Expand Down Expand Up @@ -263,7 +263,7 @@ public void testKontoauszug05()
{
BondoraCapitalPDFExtractor extractor = new BondoraCapitalPDFExtractor(new Client());

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

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

Expand Down Expand Up @@ -315,7 +315,7 @@ public void testKontoauszug06()
{
BondoraCapitalPDFExtractor extractor = new BondoraCapitalPDFExtractor(new Client());

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

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

Expand Down Expand Up @@ -378,7 +378,7 @@ public void testKontoauszug07()
{
BondoraCapitalPDFExtractor extractor = new BondoraCapitalPDFExtractor(new Client());

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

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

Expand Down Expand Up @@ -430,7 +430,7 @@ public void testKontoauszug08()
{
BondoraCapitalPDFExtractor extractor = new BondoraCapitalPDFExtractor(new Client());

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

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

Expand Down Expand Up @@ -483,7 +483,7 @@ public void testKontoauszug09()
{
BondoraCapitalPDFExtractor extractor = new BondoraCapitalPDFExtractor(new Client());

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

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

Expand Down Expand Up @@ -557,7 +557,7 @@ public void testKontoauszug10()
{
BondoraCapitalPDFExtractor extractor = new BondoraCapitalPDFExtractor(new Client());

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

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

Expand Down Expand Up @@ -620,7 +620,7 @@ public void testKontoauszug11()
{
BondoraCapitalPDFExtractor extractor = new BondoraCapitalPDFExtractor(new Client());

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

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

Expand Down Expand Up @@ -672,7 +672,7 @@ public void testKontoauszug12()
{
BondoraCapitalPDFExtractor extractor = new BondoraCapitalPDFExtractor(new Client());

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

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

Expand Down Expand Up @@ -718,4 +718,78 @@ public void testKontoauszug12()
assertThat(transaction.getSource(), is("Kontoauszug12.txt"));
assertThat(transaction.getNote(), is("Go & Grow Zinsen"));
}

@Test
public void testKontoauszug13()
{
BondoraCapitalPDFExtractor extractor = new BondoraCapitalPDFExtractor(new Client());

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

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

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

// check transaction
// get transactions
Iterator<Extractor.Item> iter = results.stream().filter(TransactionItem.class::isInstance).iterator();
assertThat(results.stream().filter(TransactionItem.class::isInstance).count(), is(5L));

Item item = iter.next();

// assert transaction
AccountTransaction transaction = (AccountTransaction) item.getSubject();
assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT));
assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR));
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2023-04-06T00:00")));
assertThat(transaction.getAmount(), is(Values.Amount.factorize(50.00)));
assertThat(transaction.getSource(), is("Kontoauszug13.txt"));
assertThat(transaction.getNote(), is("Transfer"));

item = iter.next();

// assert transaction
transaction = (AccountTransaction) item.getSubject();
assertThat(transaction.getType(), is(AccountTransaction.Type.INTEREST));
assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR));
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2023-04-10T00:00")));
assertThat(transaction.getAmount(), is(Values.Amount.factorize(0.85)));
assertThat(transaction.getSource(), is("Kontoauszug13.txt"));
assertThat(transaction.getNote(), is("Go & Grow returns"));

item = iter.next();

// assert transaction
transaction = (AccountTransaction) item.getSubject();
assertThat(transaction.getType(), is(AccountTransaction.Type.DEPOSIT));
assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR));
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2023-04-14T00:00")));
assertThat(transaction.getAmount(), is(Values.Amount.factorize(50.00)));
assertThat(transaction.getSource(), is("Kontoauszug13.txt"));
assertThat(transaction.getNote(), is("Transfer"));

item = iter.next();

// assert transaction
transaction = (AccountTransaction) item.getSubject();
assertThat(transaction.getType(), is(AccountTransaction.Type.INTEREST));
assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR));
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2023-04-18T00:00")));
assertThat(transaction.getAmount(), is(Values.Amount.factorize(0.87)));
assertThat(transaction.getSource(), is("Kontoauszug13.txt"));
assertThat(transaction.getNote(), is("Go & Grow returns"));

item = iter.next();

// assert transaction
transaction = (AccountTransaction) item.getSubject();
assertThat(transaction.getType(), is(AccountTransaction.Type.INTEREST));
assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR));
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2023-04-21T00:00")));
assertThat(transaction.getAmount(), is(Values.Amount.factorize(0.87)));
assertThat(transaction.getSource(), is("Kontoauszug13.txt"));
assertThat(transaction.getNote(), is("Go & Grow returns"));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
PDFBox Version: 1.8.17
Portfolio Performance Version: 0.64.1
-----------------------------------------
Summary
Opening €4,723.02
ZcGhq pIFr
Payments in €125.78
Date 4/1/2023 - 4/30/2023 Payments out €0
Account reference number sdatvwe4z4 Closing €4,848.8
Rainy Day
Date Payment type In Out Balance
4/6/2023 Transfer €50 €4,777.24
4/10/2023 Go & Grow returns €0.85 €4,781.51
4/14/2023 Transfer €50 €4,834.08
4/18/2023 Go & Grow returns €0.87 €4,838.4
4/21/2023 Go & Grow returns €0.87 €4,841
Total €4,848.8
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ public class ExtractorUtils
private static final DateTimeFormatter[] DATE_FORMATTER_UK = { //
DateTimeFormatter.ofPattern("dd LLL yyyy", Locale.UK), //$NON-NLS-1$
DateTimeFormatter.ofPattern("LL/dd/yyyy", Locale.UK), //$NON-NLS-1$
DateTimeFormatter.ofPattern("L/d/yyyy", Locale.UK), //$NON-NLS-1$
DateTimeFormatter.ofPattern("dd.LL.yyyy", Locale.UK) }; //$NON-NLS-1$

private static final Map<Locale, DateTimeFormatter[]> LOCALE2DATE = Map.of( //
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ private void addAccountStatementTransaction()
final DocumentType type = new DocumentType("(Zusammenfassung|Summary)");
this.addDocumentTyp(type);

Block block = new Block("^([\\d]{2}.[\\d]{2}.[\\d]{4}|[\\d]{4}.[\\d]{2}.[\\d]{2}) .*$");
Block block = new Block("^([\\d]{1,2}.[\\d]{1,2}.[\\d]{4}|[\\d]{4}.[\\d]{1,2}.[\\d]{1,2}) .*$");
type.addBlock(block);
block.setMaxSize(1);

Expand All @@ -48,7 +48,7 @@ private void addAccountStatementTransaction()

pdfTransaction
.section("type").optional()
.match("^([\\d]{2}.[\\d]{2}.[\\d]{4}|[\\d]{4}.[\\d]{2}.[\\d]{2}) "
.match("^([\\d]{1,2}.[\\d]{1,2}.[\\d]{4}|[\\d]{4}.[\\d]{1,2}.[\\d]{1,2}) "
+ "(?<type>(.berweisen"
+ "|Transfer"
+ "|Abheben"
Expand All @@ -73,7 +73,7 @@ else if ("Abheben".equals(v.get("type")) || "Withdrawal".equals(v.get("type")))
// @formatter:on
section -> section
.attributes("date", "note", "amount")
.match("^(?<date>([\\d]{2}\\.[\\d]{2}\\.[\\d]{4}|[\\d]{4}\\.[\\d]{2}\\.[\\d]{2})) "
.match("^(?<date>([\\d]{1,2}\\.[\\d]{2}\\.[\\d]{4}|[\\d]{4}\\.[\\d]{2}\\.[\\d]{2})) "
+ "(?<note>(.berweisen"
+ "|Transfer"
+ "|Abheben"
Expand Down Expand Up @@ -106,10 +106,12 @@ else if ("Abheben".equals(v.get("type")) || "Withdrawal".equals(v.get("type")))
// 03/02/2023 Go & Grow Zinsen €1.62 €9,074.6
// 03/03/2023 Go & Grow Zinsen €1.62 €9,076.22
// 03/04/2023 Go & Grow Zinsen €1.63 €9,077.85
// 4/1/2023 Go & Grow returns €0.84 €4,723.86
// 4/6/2023 Transfer €50 €4,777.24
// @formatter:on
section -> section
.attributes("date", "note", "amount")
.match("^(?<date>([\\d]{2}\\/[\\d]{2}\\/[\\d]{4}|[\\d]{4}\\/[\\d]{2}\\/[\\d]{2})) "
.match("^(?<date>([\\d]{1,2}\\/[\\d]{1,2}\\/[\\d]{4}|[\\d]{4}\\/[\\d]{1,2}\\/[\\d]{1,2})) "
+ "(?<note>(.berweisen"
+ "|Transfer"
+ "|Abheben"
Expand Down Expand Up @@ -146,7 +148,7 @@ else if ("Abheben".equals(v.get("type")) || "Withdrawal".equals(v.get("type")))
// @formatter:on
section -> section
.attributes("date", "note", "amount")
.match("^(?<date>([\\d]{2}\\-[\\d]{2}\\-[\\d]{4}|[\\d]{4}\\-[\\d]{2}\\-[\\d]{2})) "
.match("^(?<date>([\\d]{1,2}\\-[\\d]{1,2}\\-[\\d]{4}|[\\d]{4}\\-[\\d]{1,2}\\-[\\d]{1,2})) "
+ "(?<note>(.berweisen"
+ "|Transfer"
+ "|Abheben"
Expand Down