สรุปสั้นๆ: Bank Statement Parser เป็นไลบรารี Python แบบโอเพ่นซอร์สที่แยกวิเคราะห์ใบแจ้งยอดธนาคารเจ็ดรูปแบบ (CAMT.053, PAIN.001, CSV, OFX, QFX, MT940 และ PDF) ลงใน pandas DataFrames ไปป์ไลน์ PDF แบบไฮบริดพร้อมการตรวจสอบยอดคงเหลือ, REST API, การเสริมข้อมูล, ส่งออก ledger, ปริมาณงาน 27K+ tx/s
Bank Statement Parser เป็นไลบรารี Python แบบโอเพ่นซอร์สที่แยกวิเคราะห์ใบแจ้งยอดธนาคารจากเจ็ดรูปแบบลงใน pandas DataFrames ที่มีโครงสร้าง แกนหลักแบบ deterministic ประมวลผลรูปแบบที่มีโครงสร้างภายในเครื่องโดยไม่มีการเรียกเครือข่าย ไปป์ไลน์ PDF แบบไฮบริดที่เป็นตัวเลือกเสริมจะส่งต่อผ่าน LLM ในเครื่อง (ผ่าน Ollama) สำหรับใบแจ้งยอดดิจิทัลและสแกน
เหมาะสำหรับใคร?
- ทีมคลัง ที่กำลังย้ายจาก MT940 ไปยัง CAMT.053 ต้องการ parser ที่รองรับทั้งรูปแบบเก่าและใหม่ระหว่างการเปลี่ยนผ่าน รวมถึงใบแจ้งยอด PDF จากธนาคารที่ไม่มีการส่งออกแบบมีโครงสร้าง
- นักพัฒนาฟินเทค ที่สร้างไปป์ไลน์กระทบยอด รายงาน หรือบัญชี ต้องการ dependency ตัวเดียวพร้อมการตรวจสอบยอดคงเหลือ การจัดหมวดหมู่ และการส่งออก ledger ในตัว
- ทีมกำกับดูแล ที่ต้องการการปกปิด PII ตามค่าเริ่มต้น เอาต์พุตแบบ deterministic และการตรวจสอบ Golden Rule ที่แจ้งเตือนความคลาดเคลื่อนก่อนที่จะถึง ledger
- ผู้ใช้บัญชีแบบ plaintext ที่ต้องการนำเข้าใบแจ้งยอด PDF จากธนาคารลงใน hledger หรือ beancount journals โดยอัตโนมัติ
- ทุกคน ที่ปฏิเสธจะส่งข้อมูลทางการเงินที่ละเอียดอ่อนไปยัง SaaS ของบุคคลที่สาม เมื่อเครื่องมือโอเพ่นซอร์สในเครื่องสามารถทำงานได้
รูปแบบที่รองรับ
| รูปแบบ | มาตรฐาน | ประเภทไฟล์ | Parser/Method |
|---|---|---|---|
| CAMT.053 | ISO 20022 Bank-to-Customer Statement | .xml |
CamtParser |
| PAIN.001 | ISO 20022 Credit Transfer Initiation | .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() |
ทุกรูปแบบจะสร้าง pandas DataFrames ที่ปรับมาตรฐานแล้ว พร้อมชื่อคอลัมน์ที่สอดคล้องกัน ทำให้การประมวลผลปลายทางไม่ขึ้นกับรูปแบบ
ความสามารถหลัก
- ไปป์ไลน์ PDF แบบไฮบริด:
smart_ingest()ส่ง PDF ผ่านสามเส้นทาง — การดึงตารางแบบ deterministic, Text-LLM หรือ Vision-LLM — พร้อมการตรวจสอบยอดคงเหลือ Golden Rule อัตโนมัติ - ตรวจจับรูปแบบอัตโนมัติ:
detect_statement_format()ระบุรูปแบบ;create_parser()สร้าง parser ที่ถูกต้อง - การตรวจสอบยอดคงเหลือ: ตรวจสอบ Golden Rule (
opening + credits − debits == closing) พร้อมสถานะ VERIFIED/DISCREPANCY/FAILED - การตรวจสอบหลายสกุลเงิน:
verify_balance_multi_currency()จัดกลุ่มธุรกรรมตามสกุลเงินเพื่อตรวจสอบแยกกัน - REST API: FastAPI microservice พร้อม endpoint
/ingestและ/healthสำหรับการใช้งานจริง - การเสริมข้อมูล: จัดหมวดหมู่ธุรกรรมด้วย LLM พร้อม schema ที่ปรับแต่งได้ (ค่าเริ่มต้น 13 หมวดหมู่แบบ Plaid)
- ตรวจสอบแบบโต้ตอบ: ตรวจสอบความคลาดเคลื่อนด้วยการดำเนินการ accept/edit/skip/delete ผ่าน
--type review - ส่งออก Ledger:
to_hledger()และto_beancount()สำหรับเวิร์กโฟลว์บัญชีแบบ plaintext - สแกนจำนวนมาก:
scan_and_ingest()ประมวลผลโฟลเดอร์ทั้งหมดพร้อมการขจัดข้อมูลซ้ำข้ามไฟล์อัตโนมัติ - การแมปบัญชี: กฎแมปบัญชีด้วย regex จากไฟล์ JSON config สำหรับการส่งออก ledger
- การแยกวิเคราะห์แบบสตรีม: ประมวลผลไฟล์ขนาดใหญ่ (50 MB+, 50K+ ธุรกรรม) ด้วยหน่วยความจำคงที่โดยใช้
parse_streaming() - การประมวลผลแบบขนาน: แยกวิเคราะห์หลายไฟล์พร้อมกันด้วย
parse_files_parallel()โดยใช้ ProcessPoolExecutor - การขจัดข้อมูลซ้ำ:
transaction_hashแบบ idempotent (MD5 fingerprint) สำหรับการนำเข้าแบบ incremental อย่างปลอดภัย - การแยกวิเคราะห์ในหน่วยความจำ:
from_string()และfrom_bytes()สำหรับเวิร์กโฟลว์ SFTP และ API โดยไม่ต้องใช้ดิสก์ I/O - การประมวลผล ZIP อย่างปลอดภัย:
iter_secure_xml_entries()พร้อมจำกัดอัตราส่วนการบีบอัด ขีดจำกัดขนาดรายการ และการปฏิเสธรายการที่เข้ารหัส - ส่งออก: CSV, JSON, Excel (
.xlsx), Polars DataFrames, hledger และ beancount journals
ความปลอดภัยและความเป็นส่วนตัว
- การปกปิด PII: ชื่อ, IBAN และที่อยู่ถูกปกปิดตามค่าเริ่มต้นในเอาต์พุต CLI เลือกแสดงด้วย
--show-pii - การป้องกัน XXE: การแยกวิเคราะห์ XML ใช้
resolve_entities=False,no_network=True,load_dtd=False - การป้องกัน ZIP Bomb: จำกัดอัตราส่วนการบีบอัด (ค่าเริ่มต้น 100:1), ขีดจำกัดขนาดรายการ (10 MB), ปฏิเสธรายการที่เข้ารหัส
- การป้องกัน Path Traversal: บล็อกรูปแบบอันตรายและแก้ไข symlink
- ความปลอดภัยของ Supply Chain: Dependencies ล็อกด้วย SHA-256 hash, CycloneDX SBOM, build provenance attestation
- LLM ในเครื่องเท่านั้น: ไปป์ไลน์ PDF แบบไฮบริดใช้ Ollama สำหรับ inference ในเครื่อง — ไม่มีข้อมูลถูกส่งไปยัง cloud APIs
ประสิทธิภาพ
| เมตริก | ค่า |
|---|---|
| ปริมาณงาน CAMT.053 | 27,000+ tx/s |
| ปริมาณงาน PAIN.001 | 52,000+ tx/s |
| เวลาแฝงต่อธุรกรรม (CAMT) | 37 ไมโครวินาที |
| เวลาแฝงต่อธุรกรรม (PAIN.001) | 19 ไมโครวินาที |
| เวลาจนถึงผลลัพธ์แรก | < 2 ms |
| การปรับขนาดหน่วยความจำ (1K-50K tx) | คงที่ (สตรีมมิง) |
| ความครอบคลุมการทดสอบ | 100% branch coverage |
| การทดสอบ | 718 จาก 29 ไฟล์ทดสอบ |
เริ่มสร้าง
เริ่มต้นด้วยการติดตั้งและตัวอย่าง ❯
"GitHub Repository"