230 lines
6.0 KiB
Markdown
230 lines
6.0 KiB
Markdown
# ACH File Parser
|
|
|
|
A robust Python-based parser for ACH (Automated Clearing House) transaction report files with fixed-width format.
|
|
|
|
## Features
|
|
|
|
✅ **Flexible Field Extraction**
|
|
- Parses delimiter-separated fields (using `-` as separator)
|
|
- Extracts last column as remarks to handle any pattern (P-pattern or C-pattern)
|
|
- Supports multi-page reports (form feed separated)
|
|
|
|
✅ **Comprehensive Data Extraction**
|
|
- Report metadata (Report ID, Bank Name, Branch, Currency, Maker/Checker IDs)
|
|
- Transaction details (SNO, Account, Customer Name, Amount, Date, Status)
|
|
- Summary totals (Transaction counts and amounts)
|
|
|
|
✅ **Robust Logging**
|
|
- Console output with timestamps
|
|
- Rolling file logs (10MB max per file, 5 backups)
|
|
- Debug logging for troubleshooting
|
|
|
|
✅ **Multiple Output Formats**
|
|
- Console display with formatted tables
|
|
- JSON export for data processing
|
|
- Extensible for CSV/Excel export
|
|
|
|
## File Structure
|
|
|
|
```
|
|
ach_ui_dbtl_file_based/
|
|
├── main.py # Application entry point
|
|
├── ach_parser.py # ACH parser logic
|
|
├── export_to_json.py # JSON export utility
|
|
├── logging_config.py # Logging configuration
|
|
├── requirements.txt # Python dependencies
|
|
├── .gitignore # Git ignore rules
|
|
├── .env.example # Environment variables template
|
|
└── parsed_ach_data.json # Exported transaction data
|
|
```
|
|
|
|
## Installation & Setup
|
|
|
|
### 1. Create Virtual Environment
|
|
```bash
|
|
python3 -m venv venv
|
|
source venv/bin/activate
|
|
```
|
|
|
|
### 2. Install Dependencies
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
### 3. Configure Environment (Optional)
|
|
```bash
|
|
cp .env.example .env
|
|
# Edit .env with your settings
|
|
```
|
|
|
|
## Usage
|
|
|
|
### View Parsed Data in Console
|
|
```bash
|
|
source venv/bin/activate
|
|
python ach_parser.py
|
|
```
|
|
|
|
**Output:**
|
|
```
|
|
REPORT METADATA
|
|
================================================================================
|
|
REPORT_ID : TF0504-01
|
|
BANK_NAME : MURSHIDABAD D C C B LTD.
|
|
RUN_DATE : 19/01/2026 10:32
|
|
BRANCH : 99944
|
|
CURRENCY : INR
|
|
MAKER_ID : 0009991
|
|
CHECKER_ID : 0000000
|
|
|
|
SNO CUST ACCT CUSTOMER NAME DATE AMOUNT REMARKS
|
|
================================================================================
|
|
1 122001447784 Mr. ATUL DEY 19/01/26 26.26 P0126049D07E0?IOCL LPG SUBSIDY
|
|
2 122005893950 Mr. SUMEJAHAN BIBI 19/01/26 26.25 P01260491D89C?HPCL LPG SUBSIDY
|
|
...
|
|
```
|
|
|
|
### Export to JSON
|
|
```bash
|
|
python export_to_json.py
|
|
```
|
|
|
|
**Output:** `parsed_ach_data.json`
|
|
```json
|
|
{
|
|
"metadata": {
|
|
"report_id": "TF0504-01",
|
|
"bank_name": "MURSHIDABAD D C C B LTD.",
|
|
...
|
|
},
|
|
"summary": {
|
|
"tot_processed": {
|
|
"debit_count": "0",
|
|
"credit_count": "178",
|
|
"credit_amount": "41132.29"
|
|
}
|
|
},
|
|
"transactions": [
|
|
{
|
|
"sno": "1",
|
|
"cust_acct": "122001447784",
|
|
"lpg_susp": "93615999445",
|
|
"customer_name": "Mr. ATUL DEY",
|
|
"jrnl_no": "514103",
|
|
"date": "19/01/26",
|
|
"amount": "26.26",
|
|
"sys": "23-DEP-PROCESSED",
|
|
"message": "23-DEP-PROCESSED",
|
|
"cr_suspense": "",
|
|
"suspense_msg": "",
|
|
"remarks": "P0126049D07E0?IOCL LPG SUBSIDY"
|
|
},
|
|
...
|
|
]
|
|
}
|
|
```
|
|
|
|
## Transaction Field Details
|
|
|
|
| Field | Description | Example |
|
|
|-------|-------------|---------|
|
|
| SNO | Serial Number | 1, 2, 3... |
|
|
| CUST_ACCT | Customer Account Number | 122001447784 |
|
|
| LPG_SUSP | LPG Suspense Code | 93615999445 |
|
|
| CUSTOMER_NAME | Customer Name | Mr. ATUL DEY |
|
|
| JRNL_NO | Journal Number | 514103 |
|
|
| DATE | Transaction Date | 19/01/26 |
|
|
| AMOUNT | Transaction Amount | 26.26 |
|
|
| SYS | System Status Code | 23-DEP-PROCESSED |
|
|
| MESSAGE | Processing Message | 23-DEP-PROCESSED |
|
|
| REMARKS | Remarks/Reference Code | P0126049D07E0?IOCL LPG SUBSIDY |
|
|
|
|
## Supported Remarks Patterns
|
|
|
|
The parser flexibly handles different remarks patterns:
|
|
- **P-pattern**: `P0126049D07E0?IOCL LPG SUBSIDY`
|
|
- **C-pattern**: `C012634266856?MDM BURWAN BLOCK`
|
|
- **Any pattern**: Takes the last column regardless of prefix
|
|
|
|
## Logging
|
|
|
|
Logs are written to:
|
|
- **Console**: Real-time output during execution
|
|
- **File**: `logs/app.log` (rotating, 10MB max, 5 backups)
|
|
|
|
Log levels can be configured in `logging_config.py`:
|
|
```python
|
|
from logging_config import setup_logging
|
|
setup_logging(log_level=logging.DEBUG) # Change to DEBUG for verbose output
|
|
```
|
|
|
|
## Example: Using in Your Code
|
|
|
|
```python
|
|
from ach_parser import ACHParser, get_logger
|
|
from logging_config import setup_logging
|
|
|
|
# Setup logging
|
|
setup_logging()
|
|
logger = get_logger(__name__)
|
|
|
|
# Parse ACH file
|
|
parser = ACHParser('path/to/ach_file.txt')
|
|
transactions, metadata, summary = parser.parse()
|
|
|
|
# Access data
|
|
print(f"Parsed {len(transactions)} transactions")
|
|
for txn in transactions:
|
|
print(f"{txn['sno']}: {txn['customer_name']} - ₹{txn['amount']}")
|
|
|
|
# Export to JSON
|
|
from export_to_json import export_to_json
|
|
export_to_json(transactions, metadata, summary, 'output.json')
|
|
```
|
|
|
|
## Testing
|
|
|
|
To test with sample data:
|
|
```bash
|
|
python ach_parser.py
|
|
```
|
|
|
|
The parser includes debug logging for troubleshooting:
|
|
```python
|
|
logger = get_logger(__name__)
|
|
logger.debug(f"Parsing transaction: {line}")
|
|
```
|
|
|
|
## Known Limitations
|
|
|
|
- Assumes fixed-width format with `-` delimiters between main fields
|
|
- Remarks must be the last column (no fields after remarks)
|
|
- Form feeds (`\f`) are used to separate pages
|
|
|
|
## Future Enhancements
|
|
|
|
- [ ] CSV export support
|
|
- [ ] Excel export support
|
|
- [ ] Database storage integration
|
|
- [ ] Validation and error correction
|
|
- [ ] Support for different ACH report formats
|
|
- [ ] Batch processing multiple files
|
|
- [ ] Web API for file upload and parsing
|
|
|
|
## Dependencies
|
|
|
|
- **python-dotenv**: Environment variable management
|
|
- **pytest**: Testing framework
|
|
- **black**: Code formatting
|
|
- **flake8**: Code linting
|
|
|
|
See `requirements.txt` for exact versions.
|
|
|
|
## License
|
|
|
|
Internal use only.
|
|
|
|
## Support
|
|
|
|
For issues or questions, check the logs in `logs/app.log` for detailed error information.
|