Sebastien Rousseau

PAIN001

Automating ISO 20022 Payment Files Creation with pain001

Generating ISO 20022 pain.001.001.09 XML from CSV or SQLite with automatic XSD validation

6 min read
Banner for: Automating ISO 20022 Payment Files Creation with pain001

ملخص تنفيذي / نقاط رئيسية

  • ISO 20022 pain.001 (CustomerCreditTransferInitiation) هو تنسيق XML منظم يستخدم لبدء التحويلات الائتمانية ضمن SEPA (EPC SCT rulebook) وCBPR+، معيار رسائل SWIFT العابرة للحدود الإلزامي للبنوك المراسلة من نوفمبر 2025.
  • تقرأ pain001 ⧉ بيانات الدفع من CSV أو SQLite، وتربط الصفوف بهرمية رسالة pain.001.001.09 (GrpHdr -> PmtInf -> CdtTrfTxInf)، ثم تولد ملف XML مطابقًا عبر مولد قائم على template — ثلاث أسطر Python من البيانات إلى XML موثق.
  • يعمل تحقق XSD على كل ملف مولد قبل كتابة المخرجات؛ ترفع المكتبة استثناءً وصفيًا يحدد العنصر الفاشل أو cardinality أو type mismatch، فتُلتقط الأخطاء وقت التوليد بدلًا من مرحلة الإرسال إلى البنك.
  • يُحسب CtrlSum وNbOfTxs من مجموعة المعاملات ولا يُدخلان يدويًا، مما يزيل أكثر أسباب رفض ملفات الدفع شيوعًا في بوابات معالجة SEPA وCBPR+.
  • تدعم المكتبة كلًا من SEPA Credit Transfer (EUR داخل منطقة SEPA) وCBPR+ (عابر للحدود ومتعدد العملات) عبر معامل message_type، مع معالجة اختلافات التحقق على مستوى الحقول داخليًا.

pain001 ⧉ مكتبة Python مفتوحة المصدر لتوليد ملفات بدء الدفع وفق ISO 20022. تقرأ بيانات الدفع من إدخال منظم (CSV أو SQLite)، وتتحقق من البيانات، وتولد مستند XML مطابقًا بصيغة pain.001.001.09، ثم تتحقق من المخرجات مقابل مخطط ISO 20022 XSD — كل ذلك في استدعاء دالة واحد.

يصف هذا المقال بنية رسالة ISO 20022 pain.001، وكيف يربط pain001 بيانات الإدخال بعناصر الرسالة، وخط التحقق، وخيارات تهيئة SEPA مقابل CBPR+.

بنية رسالة ISO 20022 pain.001

تتكون رسالة ISO 20022 pain.001.001.09 (CustomerCreditTransferInitiation) من ثلاثة مستويات:

GrpHdr (Group Header) — كتلة واحدة لكل ملف:

العنصر الوصف مثال
MsgId معرف الرسالة الفريد ACME20240115-001
CreDtTm تاريخ ووقت الإنشاء 2024-01-15T09:00:00
NbOfTxs إجمالي عدد المعاملات 3
CtrlSum مجموع كل المبالغ المطلوبة 15000.00
InitgPty/Nm اسم الطرف المنشئ Acme Corp

PmtInf (Payment Information) — كتلة واحدة أو أكثر لكل ملف، وتجمع المعاملات حسب حساب المدين وتاريخ الدفع:

العنصر الوصف
PmtInfId معرف معلومات الدفع
PmtMtd طريقة الدفع — دائمًا TRF للتحويل الائتماني
ReqdExctnDt/Dt تاريخ التنفيذ المطلوب
Dbtr/Nm اسم المدين (المرسل)
DbtrAcct/Id/IBAN رقم IBAN للمدين
DbtrAgt/FinInstnId/BICFI رمز BIC لبنك المدين

CdtTrfTxInf (Credit Transfer Transaction Information) — عنصر واحد أو أكثر داخل كل كتلة PmtInf:

العنصر الوصف
PmtId/EndToEndId مرجع شامل من البداية إلى النهاية، ويظل محفوظًا عبر السلسلة
Amt/InstdAmt المبلغ المطلوب مع خاصية العملة
CdtrAgt/FinInstnId/BICFI رمز BIC لبنك الدائن
Cdtr/Nm اسم الدائن (المستلم)
CdtrAcct/Id/IBAN رقم IBAN للدائن
RmtInf/Ustrd معلومات تحويل غير مهيكلة، مثل مرجع الفاتورة

توليد XML من CSV

استدعاء pain001 مبسط:

from pain001 import create_xml_v9

create_xml_v9(
    data_file="payments.csv",
    data_file_type="csv",
    xml_file_path="output/pain001.xml"
)

يربط ملف CSV أسماء الأعمدة بحقول الرسالة. مثال مبسط:

id,date,nb_of_txs,ctrl_sum,initiating_party_name,debtor_name,debtor_account_IBAN,debtor_agent_BIC,creditor_name,creditor_account_IBAN,creditor_agent_BIC,instd_amt,instd_amt_ccy,end_to_end_id,remittance_info
1,2024-01-15,1,1000.00,Acme Corp,Acme Corp,GB29NWBK60161331926819,NWBKGB2L,Supplier Ltd,DE89370400440532013000,COBADEFFXXX,1000.00,EUR,ACME20240115001,INV-2024-0042

تقرأ المكتبة ctrl_sum وnb_of_txs من صف CSV في الملفات ذات الصف الواحد. أما في الملفات متعددة الصفوف (عدة معاملات في دفعة واحدة)، فيحسب pain001 هذه القيم من مجموعة المعاملات بدل الاعتماد على قيم الإدخال، مما يمنع حالات عدم التطابق.

تستخدم واجهة SQLite اصطلاح أسماء الأعمدة نفسه. مرر data_file_type="sqlite" ومسار data_file إلى ملف قاعدة بيانات SQLite؛ يقرأ pain001 جدول payment افتراضيًا.

بنية XML الناتج

مستند pain.001.001.09 مولد بصورة صحيحة لصف CSV أعلاه:

<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09">
  <CstmrCdtTrfInitn>
    <GrpHdr>
      <MsgId>ACME20240115-001</MsgId>
      <CreDtTm>2024-01-15T09:00:00</CreDtTm>
      <NbOfTxs>1</NbOfTxs>
      <CtrlSum>1000.00</CtrlSum>
      <InitgPty><Nm>Acme Corp</Nm></InitgPty>
    </GrpHdr>
    <PmtInf>
      <PmtInfId>ACME20240115-PMT-001</PmtInfId>
      <PmtMtd>TRF</PmtMtd>
      <ReqdExctnDt><Dt>2024-01-16</Dt></ReqdExctnDt>
      <Dbtr><Nm>Acme Corp</Nm></Dbtr>
      <DbtrAcct><Id><IBAN>GB29NWBK60161331926819</IBAN></Id></DbtrAcct>
      <DbtrAgt><FinInstnId><BICFI>NWBKGB2L</BICFI></FinInstnId></DbtrAgt>
      <CdtTrfTxInf>
        <PmtId><EndToEndId>ACME20240115001</EndToEndId></PmtId>
        <Amt><InstdAmt Ccy="EUR">1000.00</InstdAmt></Amt>
        <CdtrAgt><FinInstnId><BICFI>COBADEFFXXX</BICFI></FinInstnId></CdtrAgt>
        <Cdtr><Nm>Supplier Ltd</Nm></Cdtr>
        <CdtrAcct><Id><IBAN>DE89370400440532013000</IBAN></Id></CdtrAcct>
        <RmtInf><Ustrd>INV-2024-0042</Ustrd></RmtInf>
      </CdtTrfTxInf>
    </PmtInf>
  </CstmrCdtTrfInitn>
</Document>

خط تحقق XSD

بعد التصيير، يتحقق pain001 من المخرجات مقابل مخطط ISO 20022 pain.001.001.09 XSD. يشمل التحقق:

عند فشل التحقق، يرفع pain001 استثناء ValidationError مع رسالة خطأ lxml التي تحدد تعبير XPath الفاشل واسم العنصر والقيد. بهذه الطريقة تظهر أخطاء التهيئة وقت التوليد بدلًا من مرحلة الإرسال إلى البنك، حيث تكون رموز الرفض عادة أقل وصفًا.

تهيئة SEPA مقابل CBPR+

يستخدم SEPA Credit Transfer (ISO 20022 pain.001.001.09 وفق قواعد EPC SCT) وCBPR+ (معيار SWIFT للمدفوعات والتقارير العابرة للحدود) مخطط الرسالة نفسه، لكنهما يختلفان في مجموعات الحقول الإلزامية وقيود القيم:

الجانب SEPA SCT CBPR+
العملة EUR فقط متعدد العملات
إلزامية IBAN نعم نعم (للدائن)
إلزامية BIC لا (التوجيه داخل منطقة SEPA) نعم
حامل الرسوم (ChrgBr) SLEV DEBT أو CRED أو SHAR
النطاق منطقة SEPA (36 دولة) المصرفية المراسلة عالميًا

هيئ نوع الرسالة عبر معامل payment_initiation_message_type:

create_xml_v9(
    data_file="payments.csv",
    data_file_type="csv",
    xml_file_path="output/pain001.xml",
    payment_initiation_message_type="pain.001.001.09"  # default; also accepts "pain.001.001.03" for legacy SEPA
)

أصبح الامتثال لـ CBPR+ إلزاميًا في المصرفية المراسلة عبر SWIFT في نوفمبر 2023 للرسائل الواردة، وفي نوفمبر 2025 للرسائل الصادرة. يتطلب توليد ملفات pain.001 متوافقة مع CBPR+ تعبئة حقل BIC ووجود عنصر ChrgBr.

الأسئلة الشائعة

ما الفرق بين pain.001 وpain.008؟ يبدأ pain.001 (CustomerCreditTransferInitiation) تحويلًا ائتمانيًا؛ يخصم بنك المرسل من حساب المرسل ويضيف المبلغ إلى المستلم. أما pain.008 (CustomerDirectDebitInitiation) فيبدأ خصمًا مباشرًا؛ يجمع بنك الدائن الأموال من المدين. مكتبة pain001 تولد ملفات pain.001 فقط.

أي إصدار من ISO 20022 يستهدفه pain001؟ الهدف الأساسي هو pain.001.001.09، وهو الإصدار المطلوب لـ CBPR+ والمفروض من EPC للتطبيقات الجديدة في SEPA. تدعم المكتبة أيضًا pain.001.001.03 (إصدار SEPA القديم) عبر معامل payment_initiation_message_type للمنظمات التي ما زالت تستخدم واجهات مصرفية أقدم.

هل يستطيع pain001 التعامل مع عدة حسابات مدينة في ملف واحد؟ نعم. يمكن إنتاج عدة كتل PmtInf بأرقام IBAN مختلفة للمدينين عن طريق تجميع صفوف CSV ذات قيم حساب مدين مختلفة. ينشئ pain001 كتلة PmtInf واحدة لكل تركيبة فريدة من (IBAN المدين، تاريخ التنفيذ)، مع وضع كل المعاملات المطابقة كعناصر فرعية CdtTrfTxInf.

ماذا يحدث عند فشل تحقق XSD؟ يرفع pain001 استثناء pain001.exceptions.ValidationError مع رسالة تحقق lxml. لا يُكتب ملف XML إلى القرص عند فشل التحقق، لذلك لا تصل إلى مسار الإخراج إلا الملفات الصحيحة. تشمل أسباب الفشل الشائعة: IBAN بصيغة خاطئة، أو BIC ليس 8 أو 11 حرفًا، أو رمز عملة غير موجود في ISO 4217، أو عناصر إلزامية مفقودة عند غياب عمود CSV مطلوب.

المراجع

  1. European Payments Council. إرشادات تنفيذ مخطط SEPA Credit Transfer من العميل إلى البنك (v1.1). EPC، 2023. https://www.europeanpaymentscouncil.eu/document-library/implementation-guidelines/sepa-credit-transfer-scheme-customer-bank
  2. SWIFT. إرشادات استخدام CBPR+ — بدء التحويل الائتماني للعميل (pain.001). SWIFT Standards، 2023. https://www.swift.com/standards/iso-20022/cbpr-plus-usage-guidelines
  3. ISO. ISO 20022 — الخدمات المالية — مخطط الرسائل العالمي للقطاع المالي. ISO.org، 2023. https://www.iso20022.org/
  4. Rousseau, S. pain001 — مولد ملفات دفع ISO 20022. GitHub، 2023. https://github.com/sebastienrousseau/pain001

آخر مراجعة في .

آخر مراجعة .

إعادة نشر هذه المقالة

نسخ بتنسيق Medium

# Automating ISO 20022 Payment Files Creation with pain001 — Sebastien Rousseau

> Originally published at [https://sebastienrousseau.com/ar/2023-09-29-automating-iso-20022-compliant-payment-file-creation-with-pain001/](https://sebastienrousseau.com/ar/2023-09-29-automating-iso-20022-compliant-payment-file-creation-with-pain001/)

pain001 مكتبة Python مفتوحة المصدر تولد ملفات دفع XML بصيغة ISO 20022 pain.001.001.09 من CSV أو SQLite، مع تحقق XSD تلقائي، وحساب مجموع التحكم، ودعم تنسيقات SEPA SCT وCBPR+ العابرة للحدود.

Read the full article on sebastienrousseau.com: https://sebastienrousseau.com/ar/2023-09-29-automating-iso-20022-compliant-payment-file-creation-with-pain001/

نسخ بتنسيق Mastodon

Automating ISO 20022 Payment Files Creation with pain001 — Sebastien Rousseau

pain001 مكتبة Python مفتوحة المصدر تولد ملفات دفع XML بصيغة ISO 20022 pain.001.001.09 من CSV أو SQLite، مع تحقق XSD تلقائي، وحساب مجموع التحكم، ودعم تنسيقات SEPA SCT وCBPR+ العابرة للحدود.

https://sebastienrousseau.com/ar/2023-09-29-automating-iso-20022-compliant-payment-file-creation-with-pain001/

نسخ منسق لـ LinkedIn

Automating ISO 20022 Payment Files Creation with pain001 — Sebastien Rousseau

pain001 مكتبة Python مفتوحة المصدر تولد ملفات دفع XML بصيغة ISO 20022 pain.001.001.09 من CSV أو SQLite، مع تحقق XSD تلقائي، وحساب مجموع التحكم، ودعم تنسيقات SEPA SCT وCBPR+ العابرة للحدود.

إليك أبرز النقاط الاستراتيجية:

- بنية رسالة ISO 20022 pain.001. تتكون رسالة ISO 20022 pain.001.001.09 (CustomerCreditTransferInitiation) من ثلاثة مستويات:.
- توليد XML من CSV. استدعاء pain001 مبسط:.
- بنية XML الناتج. مستند pain.001.001.09 مولد بصورة صحيحة لصف CSV أعلاه:.
- خط تحقق XSD. بعد التصيير، يتحقق pain001 من المخرجات مقابل مخطط ISO 20022 pain.001.001.09 XSD.

ما هو نهج مؤسستك في مواجهة التحديات المذكورة في هذا المقال؟

→ https://sebastienrousseau.com/ar/2023-09-29-automating-iso-20022-compliant-payment-file-creation-with-pain001/

#Pain001 #Iso20022 #Pain.001.001.09 #Customercredittransferinitiation #SepaCreditTransfer

Sebastien Rousseau | CC-BY-4.0
اقتبس هذا المقال

Automating ISO 20022 Payment Files Creation with pain001 — Sebastien Rousseau

pain001 مكتبة Python مفتوحة المصدر تولد ملفات دفع XML بصيغة ISO 20022 pain.001.001.09 من CSV أو SQLite، مع تحقق XSD تلقائي، وحساب مجموع التحكم، ودعم تنسيقات SEPA SCT وCBPR+ العابرة للحدود.

BibTeX

@online{rousseau2023automating,
  author  = {Rousseau, Sebastien},
  title   = {{Automating ISO 20022 Payment Files Creation with pain001 — Sebastien Rousseau}},
  year    = {2023},
  url     = {https://sebastienrousseau.com/ar/2023-09-29-automating-iso-20022-compliant-payment-file-creation-with-pain001/},
  urldate = {2023}
}

RIS

TY  - GEN
AU  - Rousseau, Sebastien
TI  - Automating ISO 20022 Payment Files Creation with pain001 — Sebastien Rousseau
PY  - 2023
UR  - https://sebastienrousseau.com/ar/2023-09-29-automating-iso-20022-compliant-payment-file-creation-with-pain001/
ER  -

Vancouver

Rousseau S. Automating ISO 20022 Payment Files Creation with pain001 — Sebastien Rousseau. sebastienrousseau.com. 2023 Sep 29. Available from: https://sebastienrousseau.com/ar/2023-09-29-automating-iso-20022-compliant-payment-file-creation-with-pain001/

Chicago

Rousseau, Sebastien. "Automating ISO 20022 Payment Files Creation with pain001 — Sebastien Rousseau." sebastienrousseau.com. September 29, 2023. https://sebastienrousseau.com/ar/2023-09-29-automating-iso-20022-compliant-payment-file-creation-with-pain001/.

APA

Rousseau, S. (2023, September 29). Automating ISO 20022 Payment Files Creation with pain001 — Sebastien Rousseau. sebastienrousseau.com. https://sebastienrousseau.com/ar/2023-09-29-automating-iso-20022-compliant-payment-file-creation-with-pain001/

إعادة نشر هذا المقال

Automating ISO 20022 Payment Files Creation with pain001 — Sebastien Rousseau

pain001 مكتبة Python مفتوحة المصدر تولد ملفات دفع XML بصيغة ISO 20022 pain.001.001.09 من CSV أو SQLite، مع تحقق XSD تلقائي، وحساب مجموع التحكم، ودعم تنسيقات SEPA SCT وCBPR+ العابرة للحدود.

هذا المقال مرخص بموجب Creative Commons Attribution 4.0 International. تتطلب إعادة النشر الإسناد إلى عنوان URL الأساسي.

Automating ISO 20022 Payment Files Creation with pain001 — Sebastien Rousseau

pain001 مكتبة Python مفتوحة المصدر تولد ملفات دفع XML بصيغة ISO 20022 pain.001.001.09 من CSV أو SQLite، مع تحقق XSD تلقائي، وحساب مجموع التحكم، ودعم تنسيقات SEPA SCT وCBPR+ العابرة للحدود.

Originally published at https://sebastienrousseau.com/ar/2023-09-29-automating-iso-20022-compliant-payment-file-creation-with-pain001/ by Sebastien Rousseau.
Licensed under CC-BY-4.0.