From 0a4413a3eb7daa9c055e2a1313b3d6cb8e11d9e0 Mon Sep 17 00:00:00 2001 From: Nicolass Date: Wed, 17 Jul 2024 13:12:39 -0300 Subject: [PATCH 1/6] SAL-1088-account-bank-names-bol auto-commit --- src/Bo/BankNamesRepository.php | 86 ++++++++++++++++++++++++++++++++++ src/Bo/BoBankAccount.php | 53 +++++++++++++++++++++ tests/Bo/BoBankAccountTest.php | 50 ++++++++++++++++++++ 3 files changed, 189 insertions(+) create mode 100644 src/Bo/BankNamesRepository.php create mode 100644 src/Bo/BoBankAccount.php create mode 100644 tests/Bo/BoBankAccountTest.php diff --git a/src/Bo/BankNamesRepository.php b/src/Bo/BankNamesRepository.php new file mode 100644 index 0000000..473f498 --- /dev/null +++ b/src/Bo/BankNamesRepository.php @@ -0,0 +1,86 @@ +. + * + * This file is part of Saldo.com.ar. Saldo.com.ar can not be copied and/or + * distributed without the express permission of Reyesoft + */ + +namespace BankAccounts\Bo; + +/** + * @internal + */ +final class BankNamesRepository +{ + public const NAMES = [ + 'BNB' => 'Banco Nacional de Bolivia S.A.', + 'BME' => 'Banco Mercantil Santa Cruz S.A.', + 'BIS' => 'Banco Bisa S.A.', + 'BCR' => 'Banco de Crédito de Bolivia S.A.', + 'BEC' => 'Banco Económico S.A.', + 'BGA' => 'Banco Ganadero S.A.', + 'BSO' => 'Banco Solidario S.A.', + 'BNA' => 'Banco de la Nación Argentina', + 'BIE' => 'Banco para el Fomento a Iniciativas Económicas S.A.', + 'BFO' => 'Banco Fortaleza S.A.', + 'BPR' => 'Banco Prodem S.A.', + 'BPY' => 'Bancos PYME', + 'PCO' => 'Banco PYME de la Comunidad S.A.', + 'PEF' => 'Banco PYME Ecofuturo S.A.', + 'BDR' => 'Banco de Desarrollo Productivo S.A.M.', + 'BUN' => 'Banco Unión S.A.', + 'VL1' => 'La Primera Entidad Financiera de Vivienda', + 'VPR' => 'La Promotora Entidad Financiera de Vivienda', + 'VPG' => 'El Progreso Entidad Financiera de Vivienda', + 'CJN' => 'Coop. “Jesús Nazareno” R.L.', + 'CFA' => 'Coop. “Fátima” R.L.', + 'CSM' => 'Coop. “San Martín de Porres” R.L.', + 'CSA' => 'Coop. “San Antonio” R.L.', + 'CIH' => 'Coop. “Inca Huasi” R.L.', + 'CQC' => 'Coop. “Quillacollo” R.L.', + 'CJP' => 'Coop. “San José de Punata” R.L.', + 'CMM' => 'Coop. “Madre y Maestra” R.L.', + 'CLY' => 'Coop. “Loyola” R.L.', + 'CPX' => 'Coop. “Pío” X R.L.', + 'CCR' => 'Coop. “El Chorolque” R.L.', + 'CSP' => 'Coop. “San Pedro” R.L.', + 'CCP' => 'Coop. “Catedral" R.L.', + 'CCM' => 'Coop. “Comarapa” R.L.', + 'CTR' => 'Coop. “Trinidad” R.L.', + 'CEC' => 'Coop. “Educadores Gran Chaco” R.L.', + 'CST' => 'Coop. “San Mateo” R.L.', + 'CMG' => 'Coop. “Monseñor Félix Gainza” R.L.', + 'CMR' => 'Coop. “Magisterio Rural” R.L.', + 'CJB' => 'Coop. “San José de Bermejo” R.L.', + 'CJO' => 'Coop. “San Joaquín” R.L.', + 'CSR' => 'Coop. “San Roque” R.L.', + 'CAS' => 'Coop. “Asunción” R.L.', + 'CCA' => 'Coop. “Catedral de Tarija” R.L.', + 'CME' => 'Coop. “La Merced” R.L.', + 'CCB' => 'Coop. “San Carlos Borromeo” R.L.', + 'CCF' => 'Coop. “CACEF” R.L.', + 'CPG' => 'Coop. “Progreso” R.L.', + 'CLS' => 'Coop. “La Sagrada Familia” R.L.', + 'CMD' => 'Coop. “Magisterio Rural de Chuquisaca” R.L.', + 'CSN' => 'Coop. “San Martín” R.L.', + 'CSQ' => 'Coop. “San Pedro de Aiquile” R.L.', + 'CVE' => 'Coop. “Virgen de los Remedios” R.L.', + 'CLO' => 'Coop. “San Francisco Solano” R.L.', + 'CLC' => 'Coop. “Solucredit San Silvestre” R.L.', + 'COO' => 'Coop. “COOPROLE” R.L.', + 'CEY' => 'Coop. “Cristo Rey Cochabamba” R.L.', + 'CPS' => 'Coop. “Paulo VI” R.L.', + 'CUM' => 'Coop. “Unión Santiago de Machaca USAMA” R.L.', + 'CAE' => 'Coop. “Cantera” R.L.', + 'CHO' => 'Coop. “Hospicio” R.L.', + 'ICI' => 'Institución Financiera de Desarrollo CIDRE IFD', + 'ICR' => 'Institución Financiera de Desarrollo CRECER IFD', + 'IDI' => 'Institución Financiera de Desarrollo DIACONÍA FRID - IFD', + 'IFO' => 'Institución Financiera de Desarrollo FONDECO IFD', + 'IFU' => 'Institución Financiera de Desarrollo FUBODE IFD', + 'IID' => 'Institución Financiera de Desarrollo IDEPRO IFD', + 'IIM' => 'Institución Financiera de Desarrollo IMPRO IFD', + 'IPM' => 'Institución Financiera de Desarrollo Fundación PRO MUJER IFD' + ]; +} diff --git a/src/Bo/BoBankAccount.php b/src/Bo/BoBankAccount.php new file mode 100644 index 0000000..112fdb0 --- /dev/null +++ b/src/Bo/BoBankAccount.php @@ -0,0 +1,53 @@ +. + * + * This file is part of Saldo.com.ar. Saldo.com.ar can not be copied and/or + * distributed without the express permission of Reyesoft + */ + +namespace BankAccounts\Bo; + +use BankAccounts\BankAccount; +use BankAccounts\BankAccountInterface; +use BankAccounts\Bo\BankNamesRepository; + +class BoBankAccount extends BankAccount implements BankAccountInterface +{ + public function __construct(string $cci) + { + $this->bank_account_number = $cci; + } + + public function getAccountTile(): string + { + return 'CCI'; + } + + public function isValid(): bool + { + if (preg_match('/^(0[0-9]{3})\+(04[0-9]{22})$/', $this->bank_account_number) !== 1) { + return false; + } + + return true; + } + + public function getBankId(): ?string + { + return substr($this->bank_account_number, 0, 3); + } + + public function getBankName(): ?string + { + $id = self::getBankId(); + + return BankNamesRepository::NAMES[$id] ?? null; + } + + /** @codeCoverageIgnore */ + public function getInternalBankAccountNumber(): ?string + { + return null; + } +} diff --git a/tests/Bo/BoBankAccountTest.php b/tests/Bo/BoBankAccountTest.php new file mode 100644 index 0000000..cdc29c2 --- /dev/null +++ b/tests/Bo/BoBankAccountTest.php @@ -0,0 +1,50 @@ +. + * + * This file is part of Saldo.com.ar. Saldo.com.ar can not be copied and/or + * distributed without the express permission of Reyesoft + */ + +namespace Tests\Bo; + +use BankAccounts\Ar\ArBankAccount; +use BankAccounts\Bo\BoBankAccount; +use BankAccounts\Ve\VeBankAccount; +use PHPUnit\Framework\TestCase; + +/** + * @author Pablo Gabriel Reyes + * + * @see https://pabloreyes.com.ar/ Blog + * @see https://github.com/pablorsk/cbu-validator-php CBU validator on GitHub + * + * @covers \BankAccounts\Ar\ArBankAccount + * + * @internal + */ +final class BoBankAccountTest extends TestCase +{ + public function testIsValid(): void + { + static::assertFalse((new BoBankAccount(''))->isValid()); + static::assertFalse((new BoBankAccount('111111111'))->isValid()); + static::assertFalse((new BoBankAccount('AAAAA0000'))->isValid()); + static::assertFalse((new BoBankAccount('01340946340001361695'))->isValid()); + static::assertFalse((new BoBankAccount('AAAAA0000'))->isValid()); + static::assertFalse((new BoBankAccount('01050194651194-079423'))->isValid()); + static::assertFalse((new BoBankAccount('01050194651194079423 More text?'))->isValid()); + static::assertFalse((new BoBankAccount('0720262188000036092117'))->isValid()); + static::assertTrue((new BoBankAccount('1234567891234567891234'))->isValid()); + } + + public function testBankName(): void + { + static::assertNull((new BoBankAccount('00050194697194012294'))->getBankName()); + } + + public function testAccountTile(): void + { + static::assertSame('CCI', (new BoBankAccount('01050194697194012294'))->getAccountTile()); + } +} From 026aab84e92bf72b68be8dabcd6e8f1a596b58c5 Mon Sep 17 00:00:00 2001 From: Nicolass Date: Wed, 17 Jul 2024 13:15:26 -0300 Subject: [PATCH 2/6] SAL-1088-account-bank-names-bol auto-commit --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b316b3c..a5b595e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.1.4] - 2024-07-17 + +### Added +- Bolivia bank accounts + ## [1.1.3] - 2022-07-12 ### Fixed From dd7f19ec75331a42ee538624a882fc1b8e9058d8 Mon Sep 17 00:00:00 2001 From: Nicolass Date: Wed, 17 Jul 2024 13:37:39 -0300 Subject: [PATCH 3/6] SAL-1088-account-bank-names-bol auto-commit --- .phpunit.result.cache | 1 + src/Bo/BankNamesRepository.php | 2 +- src/Bo/BoBankAccount.php | 3 +-- tests/Bo/BoBankAccountTest.php | 10 +--------- 4 files changed, 4 insertions(+), 12 deletions(-) create mode 100644 .phpunit.result.cache diff --git a/.phpunit.result.cache b/.phpunit.result.cache new file mode 100644 index 0000000..f6e9f3b --- /dev/null +++ b/.phpunit.result.cache @@ -0,0 +1 @@ +C:37:"PHPUnit\Runner\DefaultTestResultCache":922:{a:2:{s:7:"defects";a:1:{s:39:"Tests\Bo\BoBankAccountTest::testIsValid";i:3;}s:5:"times";a:15:{s:39:"Tests\Ar\ArBankAccountTest::testIsValid";d:0.002;s:40:"Tests\Ar\ArBankAccountTest::testBankName";d:0;s:47:"Tests\Ar\ArBankAccountTest::testGetAccountTitle";d:0;s:39:"Tests\Bo\BoBankAccountTest::testIsValid";d:0;s:40:"Tests\Bo\BoBankAccountTest::testBankName";d:0;s:43:"Tests\Bo\BoBankAccountTest::testAccountTile";d:0;s:39:"Tests\Ar\CoBankAccountTest::testIsValid";d:0.003;s:47:"Tests\Ar\CoBankAccountTest::testGetAccountTitle";d:0;s:39:"Tests\Mx\MxBankAccountTest::testIsValid";d:0;s:40:"Tests\Mx\MxBankAccountTest::testBankName";d:0;s:60:"Tests\Mx\MxBankAccountTest::testGetInternalBankAccountNumber";d:0;s:43:"Tests\Mx\MxBankAccountTest::testAccountTile";d:0;s:39:"Tests\Ve\VeBankAccountTest::testIsValid";d:0;s:40:"Tests\Ve\VeBankAccountTest::testBankName";d:0;s:43:"Tests\Ve\VeBankAccountTest::testAccountTile";d:0;}}} \ No newline at end of file diff --git a/src/Bo/BankNamesRepository.php b/src/Bo/BankNamesRepository.php index 473f498..0ff73bb 100644 --- a/src/Bo/BankNamesRepository.php +++ b/src/Bo/BankNamesRepository.php @@ -81,6 +81,6 @@ final class BankNamesRepository 'IFU' => 'Institución Financiera de Desarrollo FUBODE IFD', 'IID' => 'Institución Financiera de Desarrollo IDEPRO IFD', 'IIM' => 'Institución Financiera de Desarrollo IMPRO IFD', - 'IPM' => 'Institución Financiera de Desarrollo Fundación PRO MUJER IFD' + 'IPM' => 'Institución Financiera de Desarrollo Fundación PRO MUJER IFD', ]; } diff --git a/src/Bo/BoBankAccount.php b/src/Bo/BoBankAccount.php index 112fdb0..fa69055 100644 --- a/src/Bo/BoBankAccount.php +++ b/src/Bo/BoBankAccount.php @@ -10,7 +10,6 @@ use BankAccounts\BankAccount; use BankAccounts\BankAccountInterface; -use BankAccounts\Bo\BankNamesRepository; class BoBankAccount extends BankAccount implements BankAccountInterface { @@ -26,7 +25,7 @@ public function getAccountTile(): string public function isValid(): bool { - if (preg_match('/^(0[0-9]{3})\+(04[0-9]{22})$/', $this->bank_account_number) !== 1) { + if (preg_match('/^\d{22}$/', $this->bank_account_number) !== 1) { return false; } diff --git a/tests/Bo/BoBankAccountTest.php b/tests/Bo/BoBankAccountTest.php index cdc29c2..c62265e 100644 --- a/tests/Bo/BoBankAccountTest.php +++ b/tests/Bo/BoBankAccountTest.php @@ -8,18 +8,11 @@ namespace Tests\Bo; -use BankAccounts\Ar\ArBankAccount; use BankAccounts\Bo\BoBankAccount; -use BankAccounts\Ve\VeBankAccount; use PHPUnit\Framework\TestCase; /** - * @author Pablo Gabriel Reyes - * - * @see https://pabloreyes.com.ar/ Blog - * @see https://github.com/pablorsk/cbu-validator-php CBU validator on GitHub - * - * @covers \BankAccounts\Ar\ArBankAccount + * @covers \BankAccounts\Bo\BoBankAccount * * @internal */ @@ -34,7 +27,6 @@ public function testIsValid(): void static::assertFalse((new BoBankAccount('AAAAA0000'))->isValid()); static::assertFalse((new BoBankAccount('01050194651194-079423'))->isValid()); static::assertFalse((new BoBankAccount('01050194651194079423 More text?'))->isValid()); - static::assertFalse((new BoBankAccount('0720262188000036092117'))->isValid()); static::assertTrue((new BoBankAccount('1234567891234567891234'))->isValid()); } From 706d431d11d1fb8ced2175b47f12436e0f1de196 Mon Sep 17 00:00:00 2001 From: Nicolass Date: Wed, 17 Jul 2024 15:21:05 -0300 Subject: [PATCH 4/6] SAL-1088-account-bank-names-bol auto-commit --- src/Bo/BoBankAccount.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Bo/BoBankAccount.php b/src/Bo/BoBankAccount.php index fa69055..30cc042 100644 --- a/src/Bo/BoBankAccount.php +++ b/src/Bo/BoBankAccount.php @@ -25,7 +25,7 @@ public function getAccountTile(): string public function isValid(): bool { - if (preg_match('/^\d{22}$/', $this->bank_account_number) !== 1) { + if (preg_match('/^([a-zA-Z]{3})\+([0-9]{22})$/', $this->bank_account_number) !== 1) { return false; } From e991005311b9b842db4439124b635d0b823a5404 Mon Sep 17 00:00:00 2001 From: Nicolass Date: Wed, 17 Jul 2024 15:26:27 -0300 Subject: [PATCH 5/6] SAL-1088-account-bank-names-bol auto-commit --- .phpunit.result.cache | 2 +- tests/Bo/BoBankAccountTest.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.phpunit.result.cache b/.phpunit.result.cache index f6e9f3b..111a00d 100644 --- a/.phpunit.result.cache +++ b/.phpunit.result.cache @@ -1 +1 @@ -C:37:"PHPUnit\Runner\DefaultTestResultCache":922:{a:2:{s:7:"defects";a:1:{s:39:"Tests\Bo\BoBankAccountTest::testIsValid";i:3;}s:5:"times";a:15:{s:39:"Tests\Ar\ArBankAccountTest::testIsValid";d:0.002;s:40:"Tests\Ar\ArBankAccountTest::testBankName";d:0;s:47:"Tests\Ar\ArBankAccountTest::testGetAccountTitle";d:0;s:39:"Tests\Bo\BoBankAccountTest::testIsValid";d:0;s:40:"Tests\Bo\BoBankAccountTest::testBankName";d:0;s:43:"Tests\Bo\BoBankAccountTest::testAccountTile";d:0;s:39:"Tests\Ar\CoBankAccountTest::testIsValid";d:0.003;s:47:"Tests\Ar\CoBankAccountTest::testGetAccountTitle";d:0;s:39:"Tests\Mx\MxBankAccountTest::testIsValid";d:0;s:40:"Tests\Mx\MxBankAccountTest::testBankName";d:0;s:60:"Tests\Mx\MxBankAccountTest::testGetInternalBankAccountNumber";d:0;s:43:"Tests\Mx\MxBankAccountTest::testAccountTile";d:0;s:39:"Tests\Ve\VeBankAccountTest::testIsValid";d:0;s:40:"Tests\Ve\VeBankAccountTest::testBankName";d:0;s:43:"Tests\Ve\VeBankAccountTest::testAccountTile";d:0;}}} \ No newline at end of file +C:37:"PHPUnit\Runner\DefaultTestResultCache":918:{a:2:{s:7:"defects";a:1:{s:39:"Tests\Bo\BoBankAccountTest::testIsValid";i:3;}s:5:"times";a:15:{s:39:"Tests\Ar\ArBankAccountTest::testIsValid";d:0.002;s:40:"Tests\Ar\ArBankAccountTest::testBankName";d:0;s:47:"Tests\Ar\ArBankAccountTest::testGetAccountTitle";d:0;s:39:"Tests\Bo\BoBankAccountTest::testIsValid";d:0;s:40:"Tests\Bo\BoBankAccountTest::testBankName";d:0;s:43:"Tests\Bo\BoBankAccountTest::testAccountTile";d:0;s:39:"Tests\Ar\CoBankAccountTest::testIsValid";d:0;s:47:"Tests\Ar\CoBankAccountTest::testGetAccountTitle";d:0;s:39:"Tests\Mx\MxBankAccountTest::testIsValid";d:0;s:40:"Tests\Mx\MxBankAccountTest::testBankName";d:0;s:60:"Tests\Mx\MxBankAccountTest::testGetInternalBankAccountNumber";d:0;s:43:"Tests\Mx\MxBankAccountTest::testAccountTile";d:0;s:39:"Tests\Ve\VeBankAccountTest::testIsValid";d:0;s:40:"Tests\Ve\VeBankAccountTest::testBankName";d:0;s:43:"Tests\Ve\VeBankAccountTest::testAccountTile";d:0;}}} \ No newline at end of file diff --git a/tests/Bo/BoBankAccountTest.php b/tests/Bo/BoBankAccountTest.php index c62265e..e0ce65a 100644 --- a/tests/Bo/BoBankAccountTest.php +++ b/tests/Bo/BoBankAccountTest.php @@ -27,7 +27,7 @@ public function testIsValid(): void static::assertFalse((new BoBankAccount('AAAAA0000'))->isValid()); static::assertFalse((new BoBankAccount('01050194651194-079423'))->isValid()); static::assertFalse((new BoBankAccount('01050194651194079423 More text?'))->isValid()); - static::assertTrue((new BoBankAccount('1234567891234567891234'))->isValid()); + static::assertTrue((new BoBankAccount('ASD+1234567891234567891234'))->isValid()); } public function testBankName(): void From 3bca7b05a33a85648aa084262663776375cd87eb Mon Sep 17 00:00:00 2001 From: Nicolass Date: Thu, 18 Jul 2024 12:54:45 -0300 Subject: [PATCH 6/6] SAL-1088-account-bank-names-bol auto-commit --- .phpunit.result.cache | 1 - CHANGELOG.md | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 .phpunit.result.cache diff --git a/.phpunit.result.cache b/.phpunit.result.cache deleted file mode 100644 index 111a00d..0000000 --- a/.phpunit.result.cache +++ /dev/null @@ -1 +0,0 @@ -C:37:"PHPUnit\Runner\DefaultTestResultCache":918:{a:2:{s:7:"defects";a:1:{s:39:"Tests\Bo\BoBankAccountTest::testIsValid";i:3;}s:5:"times";a:15:{s:39:"Tests\Ar\ArBankAccountTest::testIsValid";d:0.002;s:40:"Tests\Ar\ArBankAccountTest::testBankName";d:0;s:47:"Tests\Ar\ArBankAccountTest::testGetAccountTitle";d:0;s:39:"Tests\Bo\BoBankAccountTest::testIsValid";d:0;s:40:"Tests\Bo\BoBankAccountTest::testBankName";d:0;s:43:"Tests\Bo\BoBankAccountTest::testAccountTile";d:0;s:39:"Tests\Ar\CoBankAccountTest::testIsValid";d:0;s:47:"Tests\Ar\CoBankAccountTest::testGetAccountTitle";d:0;s:39:"Tests\Mx\MxBankAccountTest::testIsValid";d:0;s:40:"Tests\Mx\MxBankAccountTest::testBankName";d:0;s:60:"Tests\Mx\MxBankAccountTest::testGetInternalBankAccountNumber";d:0;s:43:"Tests\Mx\MxBankAccountTest::testAccountTile";d:0;s:39:"Tests\Ve\VeBankAccountTest::testIsValid";d:0;s:40:"Tests\Ve\VeBankAccountTest::testBankName";d:0;s:43:"Tests\Ve\VeBankAccountTest::testAccountTile";d:0;}}} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index a5b595e..e10de41 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [1.1.4] - 2024-07-17 ### Added -- Bolivia bank accounts +- Bolivia bank accounts and bank names ## [1.1.3] - 2022-07-12