يتعامل Bank Statement Parser مع سير العمل المالي الواقعي: استيعاب كشوفات PDF، وترحيل MT940 إلى CAMT، والتسوية الآلية مع التحقق من الرصيد، وخطوط الامتثال، وتصدير المحاسبة النصية، ونشر REST API، والمسح المجمّع، وتوحيد البنوك المتعددة.
استيعاب كشوفات PDF البنكية
النتيجة: تحليل كشوفات PDF الرقمية والممسوحة ضوئيًا مع تحقق تلقائي من الرصيد — بدون APIs سحابية، لا تغادر بياناتك جهازك.
خط أنابيب PDF الهجين يوجّه كل ملف PDF عبر مسار الاستخراج الأمثل ويتحقق من كل نتيجة.
from bankstatementparser.hybrid import smart_ingest
result = smart_ingest("statement.pdf")
print(result.source_method) # "deterministic" | "llm" | "vision"
print(result.verification.status) # VERIFIED | DISCREPANCY | FAILED
# Review discrepancies interactively
# bankstatementparser --type review --input result.json
معالجة الكشوفات المجمّعة
النتيجة: مسح أشجار مجلدات كاملة (مئات ملفات PDF وXML وCSV) مع إزالة التكرار تلقائيًا عبر الملفات في استدعاء واحد.
from bankstatementparser.hybrid import scan_and_ingest
batch = scan_and_ingest("statements/2026/", pattern="**/*.pdf")
print(f"Files: {len(batch.results)}, Unique txns: {batch.unique_count}")
الخزانة: ترحيل MT940 إلى CAMT.053
النتيجة: استدعاء API واحد يعالج كلاً من MT940 وCAMT.053 أثناء نافذة ترحيل SWIFT (نوفمبر 2025–نوفمبر 2028)، مما يلغي الحاجة إلى خطوط تحليل منفصلة.
فرق الخزانة حول العالم تنتقل من MT940 إلى CAMT.053 قبل الموعد النهائي لـ SWIFT في نوفمبر 2027. يتعامل Bank Statement Parser مع كلا التنسيقين بواجهة واحدة، مما يجعل الانتقال سلسًا.
from bankstatementparser import create_parser, detect_statement_format
# Process both MT940 and CAMT.053 with the same code
for file in daily_statement_files:
fmt = detect_statement_format(file)
parser = create_parser(file, fmt)
df = parser.parse()
load_to_treasury_system(df)
التسوية الآلية مع التحقق من الرصيد
النتيجة: DataFrames مستقلة عن التنسيق مع تحقق القاعدة الذهبية وإزالة التكرار تلتقط الأخطاء والمكررات قبل وصولها إلى دفتر الأستاذ.
تحليل كشوفات الحساب والتحقق من الأرصدة ومطابقتها مع السجلات الداخلية تلقائيًا.
from bankstatementparser import CamtParser, Deduplicator
from bankstatementparser.hybrid import verify_balance_multi_currency
parser = CamtParser("bank_statement.xml")
bank_txns = parser.parse()
# Verify balances per currency
verification = verify_balance_multi_currency(bank_txns)
for ccy, result in verification.items():
assert result.status == "VERIFIED", f"{ccy} balance mismatch!"
# Deduplicate before reconciliation
dedup = Deduplicator()
result = dedup.deduplicate(dedup.from_dataframe(bank_txns))
clean_txns = result.unique_transactions
# Match against internal records
unmatched = reconcile(clean_txns, internal_ledger)
المحاسبة النصية (hledger / beancount)
النتيجة: استيعاب كشوفات PDF البنكية تلقائيًا وتصدير معاملات مصنفة إلى تنسيق يوميات hledger أو beancount.
from bankstatementparser.hybrid import smart_ingest
from bankstatementparser.enrichment import Categorizer
from bankstatementparser.export import to_hledger
result = smart_ingest("statement.pdf")
categorizer = Categorizer()
enriched = categorizer.categorize_batch(result.transactions)
journal = to_hledger(enriched, account="Assets:Bank:Checking")
نشر REST API
النتيجة: نشر Bank Statement Parser كخدمة مصغّرة تقبل ملفات الكشوفات عبر HTTP وتُعيد JSON منظمًا.
# Start the API server
bankstatementparser-api --port 8000
# Ingest a statement
curl -X POST http://localhost:8000/ingest \
-F "file=@statement.pdf"
خطوط الامتثال والتدقيق
النتيجة: المخرجات الحتمية وتنقيح PII التلقائي والتحقق بالقاعدة الذهبية تنتج سجلات جاهزة للتدقيق تلبي متطلبات إعادة الإنتاج التنظيمية.
from bankstatementparser import CamtParser
parser = CamtParser("statement.xml")
# Stream with PII redacted for audit logs
for txn in parser.parse_streaming(redact_pii=True):
audit_log.write(txn)
# Export full data for secure internal processing
parser.export_csv("archive/statement.csv")
سير عمل SFTP إلى DataFrame
النتيجة: التحليل مباشرة من بايتات بدون إدخال/إخراج قرص، يتكامل أصلاً مع سير عمل الاتصال البنكي عبر SFTP وAPI.
from bankstatementparser import CamtParser
xml_bytes = sftp_client.read("daily_statement.xml")
parser = CamtParser.from_bytes(xml_bytes, source_name="daily.xml")
df = parser.parse()
توحيد البنوك المتعددة
النتيجة: التحليل المتوازي عبر HSBC (CAMT) وBarclays (MT940) وRevolut (CSV) وWise (OFX) وChase (PDF) ينتج مجموعة بيانات موحدة واحدة.
from bankstatementparser import parse_files_parallel
results = parse_files_parallel([
"hsbc/camt053.xml",
"barclays/mt940.sta",
"revolut/transactions.csv",
"wise/statement.ofx",
])
all_transactions = pd.concat([r.transactions for r in results if r.status == "success"])
معالجة الدفعات بأرشيفات ZIP
النتيجة: حماية ZIP المدمجة (حد نسبة 100:1، سقف إدخال 10 ميغابايت، رفض المدخلات المشفرة) تتيح معالجة أرشيفات الكشوفات الشهرية بأمان.
from bankstatementparser import iter_secure_xml_entries, CamtParser
for entry in iter_secure_xml_entries("monthly_statements.zip"):
parser = CamtParser.from_bytes(entry.xml_bytes, source_name=entry.source_name)
df = parser.parse()
save_to_warehouse(entry.source_name, df)