Norma 43 Parser (Python)
The definitive, zero-dependency Python library for parsing Spanish banking statements in the Norma 43 (Cuaderno 43 / AEB 43) format.
Designed for fintech developers, accountants, and financial data analysts who need a reliable, high-performance tool to automate bank reconciliation and process financial movements from Spanish banks (CaixaBank, BBVA, Santander, Sabadell, etc.).
🚀 Key Features
- 🔒 Complete Compliance: rigorous implementation of the AEB (Asociación Española de Banca) specifications for Norma 43.
- ⚡ High Performance: Optimized for processing large files quickly using only Python's standard library. No external dependencies.
- 🛠️ Developer Ready: Fully type-hinted (PEP 484) for excellent IDE support and error checking.
- ✅ Robust Parsing: Handles common edge cases, including complex sign management (debit/credit) and multi-line concepts (Record 23).
- 📦 Multi-Format Export: Built-in CLI to convert
.n43files to JSON or CSV for easy integration with Excel, Pandas, or DataFrames.
📖 Table of Contents
📥 Installation
Requires Python 3.7+.
Install the latest version from PyPI:
pip install norma43
Or clone the repository and install directly:
git clone https://github.com/enricopesce/norma43.git
cd norma43
pip install .
💻 Quick Start
Easily integrate Norma 43 parsing into your Python financial applications:
from norma43.parser import Norma43Parser
# 1. Initialize the parser
parser = Norma43Parser("path/to/statement.n43")
# 2. Parse the file
accounts = parser.parse()
# 3. Process the data
for account in accounts:
print(f"🏦 Account: {account.bank}-{account.branch}-{account.account_number}")
print(f"👤 Owner: {account.owner}")
print(f"💰 Balance: {account.final_balance} {account.currency}")
for tx in account.transactions:
# Use tx.full_description for all lines joined, or check if tx.description exists
desc = tx.description[0] if tx.description else "No description"
print(f" 📅 {tx.date} | {tx.amount:>10} | {desc}")
🖥️ CLI Usage
This library includes a powerful command-line interface (CLI) for quick file inspection and conversion.
1. View Summary (Text)
Ideal for quick verification of file contents.
python -m norma43 statement.n43
2. Convert to JSON
Export data for use in web apps or NoSQL databases.
python -m norma43 statement.n43 --format json --output data.json
3. Convert to CSV
Generate spreadsheets for Excel or import into Pandas.
python -m norma43 statement.n43 --format csv --output report.csv
📊 Data Structure
The parser returns a List[Account] where Account and its Transaction objects are dataclasses:
Account Object (dataclass)
| Field | Type | Description |
|---|---|---|
bank |
str |
4-digit Bank Code |
branch |
str |
4-digit Branch Code |
account_number |
str |
10-digit Account Number |
initial_balance |
Decimal |
Balance at start period |
final_balance |
Decimal |
Balance at end period |
currency |
str |
ISO 4217 Currency Code (e.g., 978 for EUR) |
transactions |
List[Transaction] |
List of transaction objects |
Transaction Object (dataclass)
| Field | Type | Description |
|---|---|---|
date |
date |
Transaction date |
value_date |
date |
Value date (Fecha valor) |
amount |
Decimal |
Signed transaction amount |
description |
List[str] |
Full description lines |
full_description |
property (str) |
All description lines joined by space |
reference1 |
str |
Primary reference / Document ID |
📋 Supported Records
| Record | Type | Status | Description |
|---|---|---|---|
| 11 | Header | ✅ | Account identification and initial balance |
| 22 | Transaction | ✅ | Main movement details (Date, Amount, IDs) |
| 23 | Complementary | ✅ | Extended concepts and descriptions |
| 33 | Footer | ✅ | Account final balance and totals verification |
| 88 | End of File | ✅ | File integrity check |
⚖️ License
Distributed under the Apache License 2.0. See LICENSE for more information.
Keywords: Norma 43, Cuaderno 43, CSB 43, AEB 43, Conciliación Bancaria, Bank Reconciliation, Spanish Banking Standard, Python Parser, Finance, Fintech, Open Banking.
Metadata
Release files for norma43 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| norma43-0.1.4.tar.gz | 13.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| norma43-0.1.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 25.0 kB
Release files / norma43-0.1.4.tar.gz
| Download URL | norma43-0.1.4.tar.gz |
|---|---|
| Size | 13.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
219c96e9e2a82affe6ec8167d28800bf9b5deaf3a8bee6b6f23db846b491a027
|
|
BLAKE2b-256 checksum How to use checksums |
507458ef80f27578c825cab23503915c8d9525581969193715fc47c79f5b3ce9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / norma43-0.1.4-py3-none-any.whl
| Download URL | norma43-0.1.4-py3-none-any.whl |
|---|---|
| Size | 11.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
79cc8bf06b6e974060598ee2ab0edf74776145127393d5afce7687339edbc546
|
|
BLAKE2b-256 checksum How to use checksums |
3350cf9b37b73ab96df5d897f4e2b214e445eae6be3dbc6f6b2c2d60035dfef4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|