@ekwo-ai/camt053
读取一个 ISO 20022 银行对客户对账单 —— 说 camt.053,账户
语句库作为 XML 发送到平面对象, 在 TypeScript 中, 没有
依赖性.
把文件交给它 它会给你其中的陈述 他们的行,还有 列表中不添加的内容.
import { readCamt053 } from '@ekwo-ai/camt053';
const { version, statements, violations } = readCamt053(bytesOrString);
for (const statement of statements) {
statement.account.identifier; // { kind: 'iban', value } or { kind: 'other', value, scheme, issuer }
statement.openingBalance; // { type: 'OPBD', amount: '1000.00', currency: 'EUR', date: '2026-03-01' }
statement.closingBalance;
statement.balanced; // true, false, or null when it could not be checked
for (const line of statement.lines) {
line.amount; // '-450.50' — signed, a decimal string, never a float
line.bookingDate; // '2026-03-05'
line.counterparty; // { name, account, agentBic, ultimateName }
line.remittance; // { unstructured: ['Invoice 2026-0107'], structured: [{ reference, type, issuer }] }
line.bankReference; // the bank's own reference for the movement
}
}
它不知道数据库、分类账和国家。 它返回的形状是
已声明 src/types.ts 和从哪里进口.
这个旁边的砖块 写入 行政部门需要的文件。 这个 一个 读取 银行发送的文件,并更改必须证明的内容: 输出是有效的, 但输入被理解了—— 文件 写来伤害读者不是.
它会做什么
- 读取 02至14号版本 信息,和 说它读哪一个
(单位:千美元)
version, (中文(简体) ),namespace) (中文(简体) ). 该版本是命名空间的最后一部分 文档元素,则无任何假设。 同样发明的语句是 十三个版本中每个版本都写着,与 ISO 计划相反 为该版本出版,并且必须读取所有对象中的相同对象 十三岁 后一版本仍作为version_not_verified; 01版本被拒绝, 因为用同名它 这是另一个信息. - 回返 每个语句 文件的 - 信件可能包含多个 并说每一次违反.
- 以 文件给出的一个IBAN 或者说
Othr/Id与 其计划和发行人。 ISO 20022提供了选择,因为世界上有一半人 没有IBAN;只返回IBANs的读者会阅读一半的语句. - 在账户持有人一方的每个金额上签字——现金为正数,a
过度透支的余额为负数,并作为 十进制字符串
所写文件的位数。以千分之百的整数进行总和
(计划允许小数点后五分;没有数字通过
number。 。 。 . - 检查一下 期初余额+已记账账项=期末余额页:1
最后一个小数。 当它不是, 声明回来的银行写它,
balanced实值false,以及balance_mismatch说差别相. 没什么 更正: 调整平衡的读取器隐藏了检查的事实 已存在以显示 . - 只计数 预定 条目(
BOOK) (中文(简体) ). 待定或信息性条目为 返回, 标记booked: false,并留出 算术,即 银行在计算期末余额时做了什么. - 留着 有条不紊的交流和自由的交流,并保持两者 当一笔报酬同时带有两个。 债权人的参考是付款人复制的东西 发票和机器可以匹配;免费文本是个人的东西 键入。 将一个扯入另一个 将分歧的调和抛出 继续生活.
- 将批次分成交易 - 每行一行
TxDtls- 何时和何时 只有在每笔交易都带有入帐货币的金额时 准确的说就是这个条目 然后每行都有自己的参考资料, 交易和通信,加entry, (中文(简体) ),detail, (中文(简体) ),detailCount财务报告和审定财务报表entryAmount把批量放回去 否则就只留下一个 线条和batch_not_split说为什么 无论哪种方式,一个语句的行添加 因此,余额核对不取决于 选择。 (和解需要交易;余额需要输入. 分出只当两人都得到他们想要的. ) - 名称 对手 作为金钱的债务人和债权人
钱会流出... 而反之
RvslInd说条目 撤销了先前的一条,即当事方保留其在 原作: 被弹出转会回来 从 被派去的派对. - 拿着 银行写的那天。 。 。 .
2026-03-31T23:30:00+02:00为3月31日 不被移动到协调世界时, 它将在另一天预订 地球上的一半. - 返回银行本身的引用( E)
AcctSvcrRef交易,或 条目、条目引用、端到端标识符 已写入 —— 说 包括《京都议定书》NOTPROVIDED占地者,是银行的字眼,而不是 读者应该决定——授权、银行交易代码 (ISO域名/家族/子家族和专有家族),回归原因, 以另一种货币订的.
声明是恶意输入
它通过电子邮件,下载,第三方API到达. XML 读取器 在此包中写着,约300行,并严格按以下目的:
- 任意
<!DOCTYPE被拒绝未读。 不需要声明 10亿个家庭和外部实体家庭都需要一个. 没有要扩展的实体表格, 没有打开文件或套接字的表格 . - 5个预定义的实体和数字字符引用被解码; 任何其它实体都是错误,而不是空字符串。 字符参考 这不是 XML 字符是一个错误.
- 大小 在读取字符前选中( e)
maxBytes,32个米B by 默认), 深度 财务报告和审定财务报表 元素计数 读取时(maxDepth64岁,maxElements2 000 000美元。 读者不再重复:十万 筑巢元素被深度限制所拒绝 并且不会触碰 堆叠. - 仅UTF-8型,可致命地解码. 一个不是UTF-8的字节是错误而不是错误 以某人的名义替换角色 宣告另一个文件 编码被拒绝:解码并传递字符串.
- 命名空间解决了,所以
<Document xmlns="…">财务报告和审定财务报表<ns2:Document xmlns:ns2="…">是同一语句,也是 另一个命名空间 永远不会被读作声明的. - 形状不完善不读 : 标记不匹配, 第二个根, 一个赤色
&页:1 重复属性,一个控制字符.
它不是一个通用的 XML 解析器: 元素和属性名称是 ASCII, 它 iSO 20022 的每个名称都是, 运行时不会对一个计划进行验证 .
抛出的东西, 回来作为违反
丢弃 (单位:千美元)StatementFileError,带有 code),因为没有陈述
报告:
| 代码 | 何时 |
|---|---|
too_large, (中文(简体) ), too_deep, (中文(简体) ), too_many_elements | 超过限制 |
unsupported_encoding | 不使用UTF-8 |
doctype_forbidden, (中文(简体) ), undefined_entity | 见上文 |
malformed_xml | 未形成 |
not_a_statement | 成型良好,而非相机 053 —相机 052, HTML 错误页面 |
unsupported_version | camt.053.001.01 (英语) |
incomplete_statement | 没有 Stmt,或没有标识符或账户的报表 |
已返回 内 violations,与语句和它的行,因为
一条坏线不应该浪费另外三百条:
| 代码 | 何时 |
|---|---|
balance_mismatch | 打开 + 预定的条目 + 关闭 ; 消息 表示差异 |
opening_balance_missing, (中文(简体) ), closing_balance_missing | 没有 OPBD (或 PRCD),无 CLBD; 未检查余额 |
balance_currency_mismatch | 以账户以外的其他货币计算的余额 |
foreign_currency_entry | (a) 以账户以外的另一种货币输入——报告, 未转换; 未检查余额 |
invalid_amount, (中文(简体) ), invalid_direction, (中文(简体) ), invalid_date | 线回与 null 那边 |
booking_date_missing | a 未经预订的条目 BookgDt (计划允许它) |
invalid_iban | 以 IBAN 写入, 并且失败 ISO 13616 自己的检查数字 —— 按已写返回 |
duplicate_bank_reference, (中文(简体) ), duplicate_entry_reference | 一份说明的两个条目 |
batch_not_split, (中文(简体) ), batch_count_mismatch | 见上文 |
version_not_verified | 此软件包没有用于 |
invalid_amount, (中文(简体) ), invalid_direction 财务报告和审定财务报表 invalid_date 每一个东西
schema拒绝:测试将每个都放入一个文件,并观看验证失败.
balance_mismatch 恰恰相反,而这个软件包存在的原因——
测试显示计划 接受 一种不相加的陈述.
它不会做的
- 它不会改变任何东西. 报告以另一种货币输入 以美元为单位的订单 以美元为单位的回报 而不是账户中移动的 货币。 收费率属于保存这些书的人.
- 什么都没有. 它不知道一张工资发票。 手拿着 对于和解需要什么, 分离.
- 它不决定什么是重复. 同一日期的两行, 金额和对等方为两行; 文件是否已导入 问谁持有前一个.
- 它不读每个元素. 收费、利息、税款、证券和 某方的卡片细节、可用性和邮政地址不 已经返回。 它们被跳过,而不是被误读.
- 它不读相机052或相机054. 日内报告和 借记/贷记通知与报表分享其大多数类型 但报告没有预定结束 平衡检查和通知 根本没有余额,所以它们是其他 以其他担保方式提交的文件,并被姓名拒绝,直到某人 需要他们.
- 报告没有全文.
StmtPgntn返回( e)page(三); 打开并关闭每个页面 临时结余(ITBD),此软件包返回其中balances并且确实 不需要开场或闭幕 如此一页的报告opening_balance_missing而不是猜测.
来源
- 国际标准化组织20022, 银行对客户现金管理编辑
BankToCustomerStatement(单位:千美元)camt.053.001.02改为.14- 计划下test/xsd/,来自 ISO 20022 消息目录和 归档, https://www.iso20022.org/iso-20022-message-definitions (中文(简体) )。 。 。 . - ISO 13616 — IBAN及其计数(ISO 7064,MOD 97-10).
- ISO 11649——结构债权人参考(
RF…),该软件包 返回,而不验证. - 可扩展标记语言 (XML) 1.0, 第5版, 以及 XML 中的命名空间 1.0 - 对 https://www.w3.org/TR/xml/ (中文(简体) ), (中文(简体) ), https://www.w3.org/TR/xml-names/ (中文(简体) )。 。 。 .
何为已核实,何为未核实
已验证: 测试此软件包的每个文件首先针对
化学式 ISO 为其版本出版(test/schema.test.ts13个计划,
未修改 test/xsd/,没有网络和系统工具)——因此
阅读器通过camt.053进行测试,而不是根据作者的camt.053的想法进行测试. 一个
语句以所有13个版本写成,并读取相同的对象.
蓄意违反《公约》规定的行为,经证实被
计划; 最重要的, 平衡, 显示 没有 成为。 这个
敌对文件按姓名分别被拒绝,要求时间或
在试验措施的范围内拒绝记忆.
写下反对阴谋的固定装置 驳斥了第一稿 同样的
小时 : BIC 成为 BICFI 在03版,而不是在04版,因为草案有它。 还有
获取计划发现两个版本 草案不知道:14,出版
在2026年3月,和01, 以同名服务,是另一个
留言.
未核实 - 这是更大的一半:
- 没有银行的文件. 这里的每个陈述都是发明的 因为一个真实的
是某人的账户。 计划说银行什么的 可能 发送; 不发送
说什么银行 已经 发送。 银行对此有不同之处
软件包关心: 批次是否详细, 引用在哪里
(单位:千美元)
AcctSvcrRef进入、交易、交易和交易, 不论支付卡片的对方是当事人还是免费文本, 什麽PRCD意味着一个星期一. 传出发明文件的读取是 说明,不是证据每个银行的第一个真实对账单是 测试谁都没跑过. - 无使用准则. EPC、CGI-MP,以及执行指南 国家银行联合会限制信息 填充,用哪个代码 无一被测试.
- 逆转的对手. 双方保持原有的
角色当
RvslInd此软件包读取信件是真实的 定义和共同惯例;计划不能说,银行可能 不同之处. - 02和08版本为所使用. 其余11个已经核实 他们的阴谋 和,就提交人所知, 没有其他的: 这里没有人见过野外的相机053.001.11.
- 外部代码集 (银行交易代码、收益原因、余额) 类型)作为书面返回,而不与 ISO 的发布相核对 列表.
- 业绩 被绑定, 未被测量: 默认大小的语句 限制在记忆中读取,作为一个整体.
许可证
麻省理工学院. 见 LICENSE。 。 。 .