tktax-transaction
tktax-transaction is a Rust library dedicated to parsing and categorizing bank transaction data in CSV format. It leverages serde for deserialization, supports multiple CSV schema variants, and provides a type-safe interface for representing monetary values, transaction types, dates, and more. This crate is part of the tktax project, aiming to unify financial data ingestion with robust, production-grade Rust paradigms.
Features
-
Structured Transaction Model
- The
Transactionstruct unifies fields found in diverse CSV exports, accommodating differences in column naming and optional fields.
- The
-
Comprehensive CSV Deserialization
- Uses
ReaderBuilderfrom thecsvcrate with trimming, flexible column counts, and varied record terminators. - Includes
TryFromCsvContentstrait to parse raw CSV bytes into typed transaction lists. - Advanced date deserialization via
serdeensures consistent date handling.
- Uses
-
Typed Monetary Amounts
- Monetary operations use a dedicated
MonetaryAmounttype to eliminate stringly-typed pitfalls. - Negative values and currency formats are safely parsed.
- Monetary operations use a dedicated
-
Transaction Categorization
- Extensible category prediction (
CategorizeTransaction) with domain-specific categories (TxCat: TransactionCategory). - Facilitates machine-aided classification via transaction descriptions, suitable for budgeting or analytics.
- Extensible category prediction (
-
Edition 2024
- Exploits the latest Rust language edition to deliver advanced trait, macro, and library features.
Usage
Add tktax-transaction to your Cargo.toml:
[]
= "0.1.0"
Import and parse CSV contents:
The library automatically handles multiple CSV layouts by employing untagged enums (TransactionInner). Optional columns (e.g., daily posted balances) are also correctly identified.
Example: Categorizing Transactions
use ;
This approach yields type-safe predictions and helps unify classification logic across different consumers.
Error Handling
All potential CSV parsing or deserialization failures use the ParseCsvError enum (CsvError variant for direct integration with csv::Error). This eliminates ambiguous string-based errors and provides a structured mechanism for handling I/O or schema mismatches gracefully.
Testing
Unit tests (#[cfg(test)]) are included, verifying compatibility with CSV files across different variations. Each test confirms successful deserialization of transactions with or without additional columns.
Contributing
Contributions that extend transaction classification or improve CSV-compatibility are welcome. File an issue or open a pull request in the main tktax repository.
License
This library is available under the terms of the MIT License or the Apache License (Version 2.0).
- Choose whichever suits your project’s licensing requirements.
Contact
Enjoy building robust financial ingestion systems with tktax-transaction!