PHPackages                             ksf-bank-import/csv-parsers - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Parsing &amp; Serialization](/categories/parsing)
4. /
5. ksf-bank-import/csv-parsers

ActiveLibrary[Parsing &amp; Serialization](/categories/parsing)

ksf-bank-import/csv-parsers
===========================

Generic CSV Parser for Bank Statement Imports

v0.1.0(3mo ago)00MITPHPPHP &gt;=7.3

Since Mar 20Pushed 3mo agoCompare

[ Source](https://github.com/ksfraser/ksf_bank_import_CSVParsers)[ Packagist](https://packagist.org/packages/ksf-bank-import/csv-parsers)[ RSS](/packages/ksf-bank-import-csv-parsers/feed)WikiDiscussions main Synced 3w ago

READMEChangelogDependencies (2)Versions (2)Used By (0)

Bank Import CSV Parsers
=======================

[](#bank-import-csv-parsers)

A PHP-based suite of CSV parsers for banking and credit card statements (WMMC, BCR, ING, RBC), designed for integration into the `ksf_bank_import` system.

Features
--------

[](#features)

- **Multi-Bank Support**: Dedicated parsers for WMMC, BCR, ING, and RBC bank statement formats.
- **Generic CSV Engine**: Abstract `GenericCsvParser` with semi-auto column recognition via alias-based header mapping.
- **ContactData Integration**: Uses `ksfraser/contact-dto` for standardized payee/contact handling via `\Ksfraser\Contact\DTO\ContactData`.
- **Statement Management**: Groups transactions into statements automatically.
- **Standardized Output**: Returns `Statement` and `Transaction` entity objects for easy integration.
- **State Machine Processing**: Handles multi-line and split transactions (e.g., GnuCash style).
- **Requirement Traceability**: Follows [AGENTS.md](AGENTS.md) standards for documentation and mapping.

Installation
------------

[](#installation)

```
composer require ksf-bank-import/csv-parsers
```

This will also install the `ksfraser/contact-dto` dependency automatically.

Usage
-----

[](#usage)

```
use Parsers\Parsers\WmmcCsvParser;
use Parsers\Parsers\BcrCsvParser;
use Parsers\Parsers\IngCsvParser;
use Parsers\Parsers\RbcCsvParser;

// Example: WMMC Parser
$parser = new WmmcCsvParser();
$statements = $parser->parse($csvContent);

// Each Statement contains Transactions with ContactData payees
foreach ($statements as $statement) {
    foreach ($statement->getTransactions() as $transaction) {
        $payee = $transaction->getPayee(); // Returns \Ksfraser\Contact\DTO\ContactData or null
        echo $payee->name;
    }
}
```

Requirements
------------

[](#requirements)

- PHP 7.3+
- Composer dependencies:
    - `ksfraser/contact-dto` (^0.1.0) — ContactData DTO for payee handling

Architecture
------------

[](#architecture)

This project uses a polymorphic parser hierarchy:

- **Base**: `src/Parsers/GenericCsvParser.php` — Abstract CSV engine with header detection, column mapping, and `mapToContactField()`.
- **Parsers**: `src/Parsers/` — Bank-specific implementations (WMMC, BCR, ING, RBC) extending the generic engine.
- **Entities**: `src/Entities/` — Domain objects: `Statement`, `Transaction`, `BankAccount`, `Balance`, `Currency`.
- **ContactData**: Payee data uses `\Ksfraser\Contact\DTO\ContactData` from the `ksfraser/contact-dto` package.

For detailed architecture, see [Project\_Architecture\_Blueprint.md](Project%20Docs/Project_Architecture_Blueprint.md).

Testing
-------

[](#testing)

```
./vendor/bin/phpunit
```

- **62 tests**, 1080 assertions, 265 lines covered — **100% code coverage**
- **Test Organization**: `tests/Parsers/` (parser tests), `tests/Entities/` (entity tests), `tests/GlobalIntegrationTest.php` (integration)
- **Fixtures**: Anonymized test CSVs in `tests/fixtures/`

Development
-----------

[](#development)

Follow the standards in [AGENTS.md](AGENTS.md) when contributing.

- **SOLID Principles**: Each parser has single responsibility; extend `GenericCsvParser` for new banks.
- **TDD**: Write tests before implementing features (Red-Green-Refactor).
- **Documentation**: Include PHPDoc with UML diagrams and `@requirement` tags.

###  Health Score

27

—

LowBetter than 47% of packages

Maintenance81

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity19

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

98d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/c8870cc04b29a973eed9ad367a936ab274d744de37ff0c35fa0540a932905271?d=identicon)[ksfraser](/maintainers/ksfraser)

---

Top Contributors

[![ksfraser](https://avatars.githubusercontent.com/u/54461925?v=4)](https://github.com/ksfraser "ksfraser (2 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/ksf-bank-import-csv-parsers/health.svg)

```
[![Health](https://phpackages.com/badges/ksf-bank-import-csv-parsers/health.svg)](https://phpackages.com/packages/ksf-bank-import-csv-parsers)
```

###  Alternatives

[mck89/peast

Peast is PHP library that generates AST for JavaScript code

19037.7M41](/packages/mck89-peast)[karriere/json-decoder

JsonDecoder implementation that allows you to convert your JSON data into PHP class objects

140439.4k12](/packages/karriere-json-decoder)[sauladam/shipment-tracker

Parses tracking information for several carriers, like UPS, USPS, DHL and GLS by simply scraping the data. No need for any kind of API access.

9642.0k](/packages/sauladam-shipment-tracker)[jstewmc/rtf

Read and write Rich Text Format (RTF) documents with PHP

46143.1k6](/packages/jstewmc-rtf)[json-mapper/laravel-package

The JsonMapper package for Laravel

25188.9k3](/packages/json-mapper-laravel-package)[moonshine/layouts-field

Field for repeating groups of fields for MoonShine

107.9k](/packages/moonshine-layouts-field)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
