From 7907ec413012258d264313a0dcf9c5e71d7308ed Mon Sep 17 00:00:00 2001 From: Sennur Tas <77441376+ccsenny@users.noreply.github.com> Date: Fri, 31 May 2024 13:54:00 +0200 Subject: [PATCH] Adjust eref information for the ING bank. (#57) This bank gives the payment information in both the /EREF/ field and the /REMI/USTD// field. --- lib/Jejik/MT940/Parser/Ing.php | 7 +- .../Tests/MT940/Fixture/document/ing-4.txt | 30 ++++ tests/Jejik/Tests/MT940/Parser/IngTest.php | 147 +++++++++++++++--- 3 files changed, 160 insertions(+), 24 deletions(-) create mode 100644 tests/Jejik/Tests/MT940/Fixture/document/ing-4.txt diff --git a/lib/Jejik/MT940/Parser/Ing.php b/lib/Jejik/MT940/Parser/Ing.php index fbebed8..c6ec2d0 100644 --- a/lib/Jejik/MT940/Parser/Ing.php +++ b/lib/Jejik/MT940/Parser/Ing.php @@ -224,8 +224,11 @@ protected function code(array $lines): ?string */ protected function eref(array $lines): ?string { - if (isset($this->codeWords($lines)[self::CODEWORD_EREF])) { - return $this->codeWords($lines)[self::CODEWORD_EREF]; + if (isset($this->codeWords($lines)[self::CODEWORD_EREF]) || isset($this->codeWords($lines)[self::CODEWORD_REMI_USTD])) { + return sprintf('%s %s', + isset($this->codeWords($lines)[self::CODEWORD_EREF]) ? $this->codeWords($lines)[self::CODEWORD_EREF] : null, + isset($this->codeWords($lines)[self::CODEWORD_REMI_USTD]) ? $this->codeWords($lines)[self::CODEWORD_REMI_USTD] : null + ); } return null; diff --git a/tests/Jejik/Tests/MT940/Fixture/document/ing-4.txt b/tests/Jejik/Tests/MT940/Fixture/document/ing-4.txt new file mode 100644 index 0000000..631a331 --- /dev/null +++ b/tests/Jejik/Tests/MT940/Fixture/document/ing-4.txt @@ -0,0 +1,30 @@ +0000 01INGBNL2AXXXX00001 +0000 01INGBNL2AXXXX00001 +940 00 +:20:ING +:25:1234567 +:28C:000 +:60F:C100722EUR0,00 +:61:100420D768,51NTRFPREF//31100900061605 +/TRCD/00200/ +:86:/PREF/SEPA-20230418220132-60947700-P1//REMI/USTD//TOTAAL 5 VZ/ +:61:100723C105,20NTRFNONREF//31101100047720 +/TRCD/00100/ +:86:/CNTP/NL71ABNA0841238***/ABNANL2A/GREENFLUX ASSETS BV///REMI/USTD +//Nr. LNT22000057 / 21.2.2023Nr. LNT22000079 / 21.3.2023Nr. LNT22 +000068 / 21.2.2023/ +:61:100723C335,53NTRFEREF//31102000055044 +/TRCD/00100/ +:86:/EREF/SCT-1-BO230019-R1//CNTP/NL68RABO0106200***/RABONL2U/Lambrix + Elektrotechniek///REMI/USTD//110130590/ +:61:100723C327,78NCMIPPM9455956//31103100006242 +/TRCD/05001/ +:86:/CNTP/NL21INGB0650141***//Rexel Holding Netherlands B.V.///REMI/U +STD//POOL-M NL21INGB0650141172 POOL-S NL30INGB0008693687 PPM94559 +56 22/07/2010/ +:62F:C230420EUR0,00 +:64:C230420EUR0,00 +:65:C230421EUR0,00 +:65:C230422EUR0,00 +:86:D000001C000003D768,51C768,51 +-XXX diff --git a/tests/Jejik/Tests/MT940/Parser/IngTest.php b/tests/Jejik/Tests/MT940/Parser/IngTest.php index 4eb10c1..841ac15 100644 --- a/tests/Jejik/Tests/MT940/Parser/IngTest.php +++ b/tests/Jejik/Tests/MT940/Parser/IngTest.php @@ -14,6 +14,9 @@ namespace Jejik\Tests\MT940\Parser; +use Jejik\MT940\Balance; +use Jejik\MT940\Exception\NoParserFoundException; +use Jejik\MT940\Parser\Ing; use Jejik\MT940\Reader; use PHPUnit\Framework\TestCase; @@ -24,6 +27,7 @@ */ class IngTest extends TestCase { + /** * @dataProvider statementsProvider * @@ -46,9 +50,9 @@ public function testStatement($statements) */ public function testBalance($statements) { - /** @var \Jejik\MT940\Balance $balance */ + /** @var Balance $balance */ $balance = $statements[0]->getOpeningBalance(); - $this->assertInstanceOf(\Jejik\MT940\Balance::class, $balance); + $this->assertInstanceOf(Balance::class, $balance); $this->assertEquals('2010-07-22 00:00:00', $balance->getDate()->format('Y-m-d H:i:s')); $this->assertEquals('EUR', $balance->getCurrency()); $this->assertEquals(0.0, $balance->getAmount()); @@ -58,24 +62,49 @@ public function testBalance($statements) * @dataProvider statementsProvider * * @param array $statements + * @param int|null $numberOfTransactions + * @param string|null $bookDate + * @param string|null $valueDate + * @param float|null $amount + * @param array|null $transactionsData */ - public function testTransaction($statements) + public function testTransaction( + array $statements, + ?int $numberOfTransactions, + ?string $bookDate, + ?string $valueDate, + ?float $amount, + ?array $transactionsData + ): void { $transactions = $statements[0]->getTransactions(); - $this->assertCount(7, $transactions); + $this->assertCount($numberOfTransactions, $transactions); - $this->assertEquals('2010-07-22 00:00:00', $transactions[0]->getBookDate()->format('Y-m-d H:i:s')); - $this->assertEquals(null, $transactions[0]->getValueDate()); - $this->assertEquals(-25.03, $transactions[0]->getAmount()); + $this->assertEquals($bookDate, $transactions[0]->getBookDate()->format('Y-m-d H:i:s')); + $this->assertEquals($valueDate, $transactions[0]->getValueDate()); + $this->assertEquals($amount, $transactions[0]->getAmount()); $expected = "RC AFREKENING BETALINGSVERKEER\r\n" - . "BETREFT REKENING 4715589 PERIODE: 01-10-2010 / 31-12-2010\r\n" - . "ING Bank N.V. tarifering ING"; + . "BETREFT REKENING 4715589 PERIODE: 01-10-2010 / 31-12-2010\r\n" + . "ING Bank N.V. tarifering ING"; + + if (!$transactionsData) { + $this->assertEquals($expected, $transactions[0]->getDescription()); + } - $this->assertEquals($expected, $transactions[0]->getDescription()); if (null !== $transactions[1]->getContraAccount()) { $this->assertEquals('0111111111', $transactions[1]->getContraAccount()->getNumber()); } + + if ($transactionsData) { + for ($i = 0; $i < count($transactions); $i++) { + $transactionInformations = json_decode($transactionsData[$i], true); + foreach ($transactionInformations as $key => $value) { + $method = 'get' . $key; + $this->assertEquals($value, $transactions[$i]->$method()); + } + } + } } /** @@ -86,26 +115,100 @@ public function testTransaction($statements) public function testBookDate($statements) { $transactions = $statements[0]->getTransactions(); - if (null !== $transactions[6]->getValueDate()) { - $this->assertEquals('2010-07-22 00:00:00', $transactions[6]->getValueDate()->format('Y-m-d H:i:s')); + if (null !== $transactions[count($transactions)-1]->getValueDate()) { + $this->assertEquals('2010-07-22 00:00:00', $transactions[count($transactions)-1]->getValueDate()->format('Y-m-d H:i:s')); } - $this->assertEquals('2010-07-23 00:00:00', $transactions[6]->getBookDate()->format('Y-m-d H:i:s')); + $this->assertEquals('2010-07-23 00:00:00', $transactions[count($transactions)-1]->getBookDate()->format('Y-m-d H:i:s')); } /** - * @dataProvider statementsProvider - * @throws \Jejik\MT940\Exception\NoParserFoundException + * @throws NoParserFoundException */ public function statementsProvider(): array { $reader = new Reader(); $reader->addParser('Ing', \Jejik\MT940\Parser\Ing::class); - - return array( - array($reader->getStatements(file_get_contents(__DIR__ . '/../Fixture/document/ing-dos.txt'))), - array($reader->getStatements(file_get_contents(__DIR__ . '/../Fixture/document/ing-unix.txt'))), - array($reader->getStatements(file_get_contents(__DIR__ . '/../Fixture/document/ing-unix-2.txt'))), - array($reader->getStatements(file_get_contents(__DIR__ . '/../Fixture/document/ing-unix-3.txt'))), - ); + return [ + [ + $reader->getStatements(file_get_contents(__DIR__ . '/../Fixture/document/ing-dos.txt')), + 'number of transactions' => 7, + 'bookDate' => '2010-07-22 00:00:00', + 'valueDate' => null, + 'amount' => -25.03, + [] + ], + [ + $reader->getStatements(file_get_contents(__DIR__ . '/../Fixture/document/ing-unix.txt')), + 'number of transactions' => 7, + 'bookDate' => '2010-07-22 00:00:00', + 'valueDate' => null, + 'amount' => -25.03, + [] + ], + [ + $reader->getStatements(file_get_contents(__DIR__ . '/../Fixture/document/ing-unix-2.txt')), + 'number of transactions' => 7, + 'bookDate' => '2010-07-22 00:00:00', + 'valueDate' => null, + 'amount' => -25.03, + [] + ], + [ + $reader->getStatements(file_get_contents(__DIR__ . '/../Fixture/document/ing-unix-3.txt')), + 'number of transactions' => 7, + 'bookDate' => '2010-07-22 00:00:00', + 'valueDate' => null, + 'amount' => -25.03, + [] + ], + [ + $reader->getStatements(file_get_contents(__DIR__ . '/../Fixture/document/ing-4.txt')), + 'number of transactions' => 4, + 'bookDate' => '2010-04-20 00:00:00', + 'valueDate' => null, + 'amount' => -768.51, + [ + '{ + "Code":"TRF", + "TransactionCode":"00200", + "TxText":"TOTAAL 5 VZ/", + "Eref":"TOTAAL 5 VZ/", + "Bic":null, + "Iban":null, + "AccountHolder":null, + "RawSubfieldsData":"/PREF/SEPA-20230418220132-60947700-P1//REMI/USTD//TOTAAL 5 VZ/" + }', + '{ + "Code":"TRF", + "TransactionCode":"00100", + "TxText":"Nr. LNT22000057 / 21.2.2023Nr. LNT22000079 / 21.3.2023Nr. LNT22000068 / 21.2.2023/", + "Eref":"Nr. LNT22000057 / 21.2.2023Nr. LNT22000079 / 21.3.2023Nr. LNT22000068 / 21.2.2023/", + "Bic":"ABNANL2A", + "Iban":"NL71ABNA0841238***", + "AccountHolder":"GREENFLUX ASSETS BV", + "RawSubfieldsData":"/CNTP/NL71ABNA0841238***/ABNANL2A/GREENFLUX ASSETS BV///REMI/USTD//Nr. LNT22000057 / 21.2.2023Nr. LNT22000079 / 21.3.2023Nr. LNT22000068 / 21.2.2023/" + }', + '{ + "Code":"TRF", + "TransactionCode":"00100", + "TxText":"110130590/", + "Eref":"SCT-1-BO230019-R1/ 110130590/", + "Bic":"RABONL2U", + "Iban":"NL68RABO0106200***", + "AccountHolder":"Lambrix Elektrotechniek", + "RawSubfieldsData":"/EREF/SCT-1-BO230019-R1//CNTP/NL68RABO0106200***/RABONL2U/Lambrix Elektrotechniek///REMI/USTD//110130590/" + }', + '{ + "Code":"CMI", + "TransactionCode":"05001", + "TxText":"POOL-M NL21INGB0650141172 POOL-S NL30INGB0008693687 PPM9455956 22/07/2010/", + "Eref":"POOL-M NL21INGB0650141172 POOL-S NL30INGB0008693687 PPM9455956 22/07/2010/", + "Bic":null, + "Iban":"NL21INGB0650141***", + "AccountHolder":"Rexel Holding Netherlands B.V.", + "RawSubfieldsData":"/CNTP/NL21INGB0650141***//Rexel Holding Netherlands B.V.///REMI/USTD//POOL-M NL21INGB0650141172 POOL-S NL30INGB0008693687 PPM9455956 22/07/2010/"}', + ] + ], + ]; } }