ملخص: Bank Statement Parser هي مكتبة Python مفتوحة المصدر تحلل سبعة تنسيقات لكشوفات الحساب البنكية (CAMT.053، PAIN.001، CSV، OFX، QFX، MT940، وPDF) إلى DataFrames من pandas. خط أنابيب PDF هجين مع تحقق من الرصيد، REST API، إثراء، تصدير دفتر أستاذ، وإنتاجية 27 ألف+ معاملة/ثانية.
Bank Statement Parser هي مكتبة Python مفتوحة المصدر تحلل كشوفات الحساب البنكية من سبعة تنسيقات إلى DataFrames منظمة من pandas. النواة الحتمية تعالج التنسيقات المنظمة محليًا بدون أي اتصال بالشبكة. خط أنابيب PDF الهجين الاختياري يمر عبر نماذج LLM المحلية (عبر Ollama) للكشوفات الرقمية والممسوحة ضوئيًا.
لمن هذا؟
- فرق الخزانة التي تنتقل من MT940 إلى CAMT.053 وتحتاج محللًا يتعامل مع التنسيقات القديمة والجديدة أثناء الانتقال، بالإضافة إلى كشوفات PDF من بنوك لا تقدم صادرات منظمة.
- مطورو التكنولوجيا المالية الذين يبنون خطوط تسوية أو تقارير أو محاسبة ويريدون تبعية واحدة مع تحقق مدمج من الرصيد وتصنيف وتصدير دفتر أستاذ.
- فرق الامتثال التي تحتاج تنقيح PII افتراضيًا، ومخرجات حتمية، وتحقق القاعدة الذهبية الذي يُنبّه على التناقضات قبل وصولها إلى الدفتر.
- مستخدمو المحاسبة النصية الذين يريدون استيعابًا آليًا من كشوفات PDF البنكية مباشرة إلى يوميات hledger أو beancount.
- أي شخص يرفض إرسال بيانات مالية حساسة إلى SaaS خارجي بينما أداة محلية مفتوحة المصدر تقوم بالمهمة.
التنسيقات المدعومة
| التنسيق | المعيار | أنواع الملفات | المحلل/الطريقة |
|---|---|---|---|
| CAMT.053 | ISO 20022 كشف من البنك إلى العميل | .xml |
CamtParser |
| PAIN.001 | ISO 20022 بدء تحويل ائتماني | .xml |
Pain001Parser |
| CSV | صادرات بنكية عامة | .csv |
CsvStatementParser |
| OFX | Open Financial Exchange | .ofx |
OfxParser |
| QFX | Quicken Financial Exchange | .qfx |
QfxParser |
| MT940 | معيار SWIFT | .mt940, .sta |
Mt940Parser |
| كشوفات رقمية وممسوحة ضوئيًا | .pdf |
smart_ingest() |
تنتج جميع التنسيقات DataFrames موحدة من pandas بأسماء أعمدة متسقة، مما يجعل المعالجة اللاحقة مستقلة عن التنسيق.
القدرات الرئيسية
- خط أنابيب PDF هجين:
smart_ingest()يوجّه ملفات PDF عبر ثلاثة مسارات — استخراج جداول حتمي، أو نص + LLM، أو رؤية + LLM — مع تحقق تلقائي بالقاعدة الذهبية. - اكتشاف تلقائي للتنسيق:
detect_statement_format()يحدد التنسيق؛create_parser()يُنشئ المحلل المناسب. - التحقق من الرصيد: فحص القاعدة الذهبية (
opening + credits − debits == closing) مع حالة VERIFIED/DISCREPANCY/FAILED. - تحقق متعدد العملات:
verify_balance_multi_currency()يجمّع المعاملات حسب العملة للتحقق المستقل. - REST API: خدمة FastAPI مع نقاط
/ingestو/healthلبيئات الإنتاج. - الإثراء: تصنيف معاملات مدعوم بـ LLM مع مخططات قابلة للتوصيل (مخطط Plaid ذو 13 فئة افتراضيًا).
- مراجعة تفاعلية: تصفح التناقضات بإجراءات قبول/تعديل/تخطي/حذف عبر
--type review. - تصدير دفتر الأستاذ:
to_hledger()وto_beancount()لسير عمل المحاسبة النصية. - مسح مجمّع:
scan_and_ingest()يعالج أشجار المجلدات مع إزالة التكرار تلقائيًا عبر الملفات. - تعيين الحسابات: قواعد تعيين حسابات قائمة على regex من إعدادات JSON لتصدير الدفتر.
- تحليل بث: معالجة ملفات كبيرة (50 ميغابايت+، 50 ألف+ معاملة) بذاكرة محدودة باستخدام
parse_streaming(). - معالجة متوازية: تحليل ملفات متعددة بالتوازي مع
parse_files_parallel()باستخدام ProcessPoolExecutor. - إزالة التكرار:
transaction_hashحتمي (بصمة MD5) لاستيعاب تدريجي آمن. - تحليل في الذاكرة:
from_string()وfrom_bytes()لسير عمل SFTP وAPI بدون إدخال/إخراج قرص. - معالجة ZIP آمنة:
iter_secure_xml_entries()مع حدود نسبة الضغط، وسقوف حجم الإدخال، ورفض المدخلات المشفرة. - التصدير: CSV، JSON، Excel (
.xlsx)، DataFrames من Polars، يوميات hledger وbeancount.
الأمن والخصوصية
- تنقيح PII: الأسماء وأرقام IBAN والعناوين تُخفى افتراضيًا في مخرجات CLI. فعّل العرض بـ
--show-pii. - حماية XXE: تحليل XML يستخدم
resolve_entities=False،no_network=True،load_dtd=False. - حماية ZIP Bomb: حدود نسبة الضغط (افتراضي 100:1)، سقف حجم الإدخال (10 ميغابايت)، رفض المدخلات المشفرة.
- منع اجتياز المسار: قائمة حظر أنماط خطرة وحل الروابط الرمزية.
- أمان سلسلة التوريد: تبعيات مقفلة بـ SHA-256 hash، CycloneDX SBOM، شهادة مصدر البناء.
- نماذج LLM محلية فقط: خط أنابيب PDF الهجين يستخدم Ollama للاستدلال المحلي — لا تُرسل بيانات إلى APIs سحابية.
الأداء
| المقياس | القيمة |
|---|---|
| إنتاجية CAMT.053 | 27,000+ معاملة/ثانية |
| إنتاجية PAIN.001 | 52,000+ معاملة/ثانية |
| زمن المعاملة الواحدة (CAMT) | 37 ميكروثانية |
| زمن المعاملة الواحدة (PAIN.001) | 19 ميكروثانية |
| الوقت لأول نتيجة | أقل من 2 مللي ثانية |
| استهلاك الذاكرة (1K-50K معاملة) | ثابت (streaming) |
| تغطية الاختبار | 100% تغطية فرعية |
| الاختبارات | 718 عبر 29 ملف اختبار |