norma43
v1.0.1
Published
Parser TypeScript para ficheros bancarios en formato Norma 43 (AEB-43)
Readme
norma43
TypeScript parser for bank files in Norma 43 (AEB-43) format, the Spanish standard for exchanging current account information.
Features
- Strict Typing: The output consists of TypeScript objects with well-defined interfaces, with no
any. - Multiple Input Sources: In-memory string, local file, remote URL, or data stream.
- Integrated Validation: Detects and reports format errors according to the official specification.
- Zero Production Dependencies: Lightweight library, no unnecessary overhead.
Installation
pnpm add norma43Basic Usage
Parse from String
import { parse } from 'norma43';
try {
const normaFile = parse(norma43String);
console.log(`Accounts found: ${normaFile.accounts.length}`);
} catch (error) {
if (error instanceof Norma43ParseError) {
console.error(`Error in line ${error.lineNumber}: ${error.message}`);
}
}Parse from File
import { parseFile } from 'norma43';
const normaFile = await parseFile('./path/to/file.n43');Parse from URL
import { parseUrl } from 'norma43';
const normaFile = await parseUrl('https://example.com/movements.n43');Parse from Stream
import { parseStream } from 'norma43';
import { createReadStream } from 'node:fs';
const stream = createReadStream('large-file.n43');
const normaFile = await parseStream(stream);Data Structure
The parser returns a NormaFile object with the following structure:
accounts: Array ofAccountobjects.header:AccountHeaderRecord(Code 11).movements: Array ofMovementobjects.record:MovementRecord(Code 22).concepts: Array ofConceptComplementaryRecord(Code 23).amountEquivalence:AmountEquivalenceRecord(Code 24, optional).
footer:AccountFooterRecord(Code 33).
footer:FileFooterRecord(Code 88).
Error Handling
When the parser encounters an invalid format, it throws a Norma43ParseError. This error includes:
message: Descriptive error message.code: Error code (e.g.,INVALID_LINE_LENGTH,UNKNOWN_RECORD_CODE).lineNumber: Line number where the error occurred (1-indexed).lineContent: Content of the problematic line.
