Sebastien Rousseau

PAIN001

pain001 দিয়ে ISO 20022 পেমেন্ট ফাইল তৈরি স্বয়ংক্রিয়করণ

স্বয়ংক্রিয় XSD যাচাইসহ CSV বা SQLite থেকে ISO 20022 pain.001.001.09 XML তৈরি

6 min read
Banner for: pain001 দিয়ে ISO 20022 পেমেন্ট ফাইল তৈরি স্বয়ংক্রিয়করণ

নির্বাহী সারসংক্ষেপ / মূল বিষয়াবলি

  • ISO 20022 pain.001 (CustomerCreditTransferInitiation) হলো SEPA (EPC SCT rulebook) এবং CBPR+ (SWIFT-এর cross-border messaging standard, correspondent banks-এর জন্য নভেম্বর ২০২৫ থেকে বাধ্যতামূলক) অধীনে credit transfer শুরু করার জন্য ব্যবহৃত structured XML message format।
  • pain001 ⧉ CSV বা SQLite থেকে payment data পড়ে, row-গুলো pain.001.001.09 message hierarchy-তে (GrpHdr -> PmtInf -> CdtTrfTxInf) ম্যাপ করে, এবং templated generator দিয়ে conformant XML ফাইল তৈরি করে — data থেকে validated XML পর্যন্ত তিন লাইন Python।
  • XSD validation প্রতিটি generated file লেখার আগে চালানো হয়; library ব্যর্থ element, cardinality বা type mismatch শনাক্ত করে বর্ণনামূলক exception তোলে, তাই error bank submission পর্যায়ে নয়, generation সময়েই ধরা পড়ে।
  • CtrlSum এবং NbOfTxs transaction set থেকে গণনা হয়, হাতে লিখতে হয় না — SEPA ও CBPR+ processing gateway-তে payment file rejection-এর সবচেয়ে সাধারণ কারণ দূর করে।
  • SEPA Credit Transfer (EUR, SEPA zone-এর মধ্যে) এবং CBPR+ (cross-border, multi-currency) উভয় message variant message_type parameter-এর মাধ্যমে সমর্থিত, আর field-level validation difference অভ্যন্তরীণভাবে সামলানো হয়।

pain001 ⧉ ISO 20022 payment initiation file তৈরির জন্য একটি ওপেন-সোর্স Python লাইব্রেরি। এটি structured input (CSV বা SQLite) থেকে payment data পড়ে, data যাচাই করে, conformant pain.001.001.09 XML document তৈরি করে এবং ISO 20022 XSD schema-এর বিপরীতে output যাচাই করে — সবই একটি function call-এ।

এই প্রবন্ধে ISO 20022 pain.001 message structure, pain001 কীভাবে input data-কে message element-এ map করে, validation pipeline এবং SEPA বনাম CBPR+ configuration option ব্যাখ্যা করা হয়েছে।

ISO 20022 pain.001 বার্তার গঠন

ISO 20022 pain.001.001.09 (CustomerCreditTransferInitiation) বার্তার তিনটি স্তর আছে:

GrpHdr (Group Header) — প্রতি ফাইলে একটি:

Element বিবরণ উদাহরণ
MsgId অনন্য message identifier ACME20240115-001
CreDtTm তৈরির তারিখ ও সময় 2024-01-15T09:00:00
NbOfTxs মোট transaction সংখ্যা 3
CtrlSum সব instructed amount-এর যোগফল 15000.00
InitgPty/Nm initiating party-এর নাম Acme Corp

PmtInf (Payment Information) — প্রতি ফাইলে এক বা একাধিক; debtor account এবং payment date অনুযায়ী transaction group করে:

Element বিবরণ
PmtInfId Payment information identifier
PmtMtd Payment method — credit transfer-এর জন্য সবসময় TRF
ReqdExctnDt/Dt অনুরোধকৃত execution date
Dbtr/Nm debtor (sender)-এর নাম
DbtrAcct/Id/IBAN debtor IBAN
DbtrAgt/FinInstnId/BICFI debtor bank BIC

CdtTrfTxInf (Credit Transfer Transaction Information) — প্রতি PmtInf block-এ এক বা একাধিক:

Element বিবরণ
PmtId/EndToEndId end-to-end reference, যা পুরো chain জুড়ে সংরক্ষিত থাকে
Amt/InstdAmt currency attribute-সহ instructed amount
CdtrAgt/FinInstnId/BICFI creditor bank BIC
Cdtr/Nm creditor (receiver)-এর নাম
CdtrAcct/Id/IBAN creditor IBAN
RmtInf/Ustrd unstructured remittance information, যেমন invoice reference

CSV থেকে XML তৈরি

একটি ন্যূনতম pain001 invocation:

from pain001 import create_xml_v9

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

CSV ফাইল column name-গুলোকে message field-এ map করে। একটি ন্যূনতম উদাহরণ:

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

single-row file-এর জন্য library CSV row থেকে ctrl_sum এবং nb_of_txs পড়ে। multi-row file-এর ক্ষেত্রে (এক batch-এ একাধিক transaction), pain001 input value-এর ওপর নির্ভর না করে transaction set থেকে এই value-গুলো গণনা করে, যা mismatch প্রতিরোধ করে।

SQLite interface একই column-name convention ব্যবহার করে। SQLite database file-এর path সহ data_file_type="sqlite" এবং data_file pass করুন; pain001 default হিসেবে payment table পড়ে।

তৈরি হওয়া XML গঠন

উপরের CSV row-এর জন্য সঠিকভাবে render হওয়া pain.001.001.09 document:

<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 validation pipeline

render করার পরে pain001 ISO 20022 pain.001.001.09 XSD schema-এর বিপরীতে output validate করে। Validation check করে:

validation ব্যর্থ হলে pain001 lxml error message সহ ValidationError তোলে, যেখানে failing XPath expression, element name এবং constraint শনাক্ত করা থাকে। এতে misconfiguration bank submission পর্যায়ে নয়, generation সময়েই সামনে আসে; bank rejection code সাধারণত কম descriptive হয়।

SEPA বনাম CBPR+ configuration

SEPA Credit Transfer (EPC SCT rulebook-এর অধীনে ISO 20022 pain.001.001.09) এবং CBPR+ (SWIFT-এর Cross-Border Payments and Reporting Plus standard) একই message schema ব্যবহার করে, কিন্তু mandatory field set এবং value constraint-এ পার্থক্য আছে:

Aspect SEPA SCT CBPR+
Currency শুধু EUR multi-currency
IBAN mandatory হ্যাঁ হ্যাঁ (creditor)
BIC mandatory না (SEPA zone routing) হ্যাঁ
Charge bearer (ChrgBr) SLEV DEBT, CRED, অথবা SHAR
Scope SEPA zone (৩৬ দেশ) global correspondent banking

payment_initiation_message_type parameter দিয়ে message type configure করুন:

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
)

SWIFT correspondent banking-এর জন্য inbound message-এ নভেম্বর ২০২৩ থেকে এবং outbound message-এ নভেম্বর ২০২৫ থেকে CBPR+ compliance বাধ্যতামূলক হয়েছে। CBPR+-conformant pain.001 file তৈরি করতে BIC field পূরণ করা এবং ChrgBr element উপস্থিত থাকা প্রয়োজন।

প্রায়শই জিজ্ঞাসিত প্রশ্ন

pain.001 এবং pain.008-এর পার্থক্য কী? pain.001 (CustomerCreditTransferInitiation) একটি credit transfer শুরু করে — sender-এর bank sender-এর account debit করে এবং receiver-কে credit করে। pain.008 (CustomerDirectDebitInitiation) একটি direct debit শুরু করে — creditor-এর bank debtor থেকে fund সংগ্রহ করে। pain001 library শুধু pain.001 file তৈরি করে।

pain001 কোন ISO 20022 version target করে? প্রাথমিক target হলো pain.001.001.09, যা CBPR+-এর জন্য প্রয়োজনীয় এবং নতুন SEPA implementation-এর জন্য EPC দ্বারা বাধ্যতামূলক। পুরোনো bank interface ব্যবহার করা organization-এর জন্য library payment_initiation_message_type parameter-এর মাধ্যমে pain.001.001.03 (legacy SEPA version)-ও support করে।

pain001 কি এক ফাইলে একাধিক debtor account সামলাতে পারে? হ্যাঁ। ভিন্ন debtor account value-সহ CSV row group করে ভিন্ন debtor IBAN-এর একাধিক PmtInf block তৈরি করা যায়। pain001 প্রতিটি unique (debtor IBAN, execution date) combination-এর জন্য একটি PmtInf block তৈরি করে, এবং সব matching transaction-কে CdtTrfTxInf child হিসেবে nest করে।

XSD validation ব্যর্থ হলে কী হয়? pain001 lxml validation message সহ pain001.exceptions.ValidationError তোলে। validation ব্যর্থ হলে XML file disk-এ লেখা হয় না, তাই output path-এ শুধু valid file পৌঁছায়। সাধারণ failure কারণ হলো: ভুল format-এর IBAN, ৮ বা ১১ character নয় এমন BIC, ISO 4217-এ নেই এমন currency code, অথবা required CSV column অনুপস্থিত থাকায় mandatory element missing।

তথ্যসূত্র

  1. European Payments Council. SEPA Credit Transfer Scheme Customer-to-Bank Implementation Guidelines (v1.1). EPC, 2023. https://www.europeanpaymentscouncil.eu/document-library/implementation-guidelines/sepa-credit-transfer-scheme-customer-bank
  2. SWIFT. CBPR+ Usage Guidelines — Customer Credit Transfer Initiation (pain.001). SWIFT Standards, 2023. https://www.swift.com/standards/iso-20022/cbpr-plus-usage-guidelines
  3. ISO. ISO 20022 — Financial services — Universal financial industry message scheme. ISO.org, 2023. https://www.iso20022.org/
  4. Rousseau, S. pain001 — ISO 20022 payment file generator. GitHub, 2023. https://github.com/sebastienrousseau/pain001

সর্বশেষ পর্যালোচনা

সর্বশেষ পর্যালোচনা .

এই নিবন্ধটি ক্রস-পোস্ট করুন

Medium-এর জন্য ফরম্যাট কপি করুন

# pain001 দিয়ে ISO 20022 পেমেন্ট ফাইল তৈরি স্বয়ংক্রিয়করণ — Sebastien Rousseau

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

pain001 একটি ওপেন-সোর্স Python লাইব্রেরি যা CSV বা SQLite ডেটা থেকে ISO 20022 pain.001.001.09 XML পেমেন্ট ফাইল তৈরি করে, স্বয়ংক্রিয় XSD যাচাই, control-sum গণনা এবং SEPA SCT ও CBPR+ সীমান্ত-পার বার্তা ফরম্যাট সমর্থনসহ।

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

Mastodon-এর জন্য ফরম্যাট কপি করুন

pain001 দিয়ে ISO 20022 পেমেন্ট ফাইল তৈরি স্বয়ংক্রিয়করণ — Sebastien Rousseau

pain001 একটি ওপেন-সোর্স Python লাইব্রেরি যা CSV বা SQLite ডেটা থেকে ISO 20022 pain.001.001.09 XML পেমেন্ট ফাইল তৈরি করে, স্বয়ংক্রিয় XSD যাচাই, control-sum গণনা এবং SEPA SCT ও CBPR+ সীমান্ত-পার বার্তা ফরম্যাট সমর্থনসহ।

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

LinkedIn-এর জন্য বিন্যাসিত কপি করুন

pain001 দিয়ে ISO 20022 পেমেন্ট ফাইল তৈরি স্বয়ংক্রিয়করণ — Sebastien Rousseau

pain001 একটি ওপেন-সোর্স Python লাইব্রেরি যা CSV বা SQLite ডেটা থেকে ISO 20022 pain.001.001.09 XML পেমেন্ট ফাইল তৈরি করে, স্বয়ংক্রিয় XSD যাচাই, control-sum গণনা এবং SEPA SCT ও CBPR+ সীমান্ত-পার বার্তা ফরম্যাট সমর্থনসহ।.

এখানে মূল কৌশলগত টেকওয়েগুলি রয়েছে:

- ISO 20022 pain.001 বার্তার গঠন. ISO 20022 pain.001.001.09 (CustomerCreditTransferInitiation) বার্তার তিনটি স্তর আছে:.
- CSV থেকে XML তৈরি. একটি ন্যূনতম pain001 invocation:.
- তৈরি হওয়া XML গঠন. উপরের CSV row-এর জন্য সঠিকভাবে render হওয়া pain.001.001.09 document:.
- XSD validation pipeline. render করার পরে pain001 ISO 20022 pain.001.001.09 XSD schema-এর বিপরীতে output validate করে। Validation check করে:.

এই নিবন্ধে উল্লিখিত চ্যালেঞ্জগুলির প্রতি আপনার প্রতিষ্ঠানের পদ্ধতি কী?

→ https://sebastienrousseau.com/bn/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
এই নিবন্ধটি উদ্ধৃত করুন

pain001 দিয়ে ISO 20022 পেমেন্ট ফাইল তৈরি স্বয়ংক্রিয়করণ — Sebastien Rousseau

pain001 একটি ওপেন-সোর্স Python লাইব্রেরি যা CSV বা SQLite ডেটা থেকে ISO 20022 pain.001.001.09 XML পেমেন্ট ফাইল তৈরি করে, স্বয়ংক্রিয় XSD যাচাই, control-sum গণনা এবং SEPA SCT ও CBPR+ সীমান্ত-পার বার্তা ফরম্যাট সমর্থনসহ।

BibTeX

@online{rousseau2023pain001,
  author  = {Rousseau, Sebastien},
  title   = {{pain001 দিয়ে ISO 20022 পেমেন্ট ফাইল তৈরি স্বয়ংক্রিয়করণ — Sebastien Rousseau}},
  year    = {2023},
  url     = {https://sebastienrousseau.com/bn/2023-09-29-automating-iso-20022-compliant-payment-file-creation-with-pain001/},
  urldate = {2023}
}

RIS

TY  - GEN
AU  - Rousseau, Sebastien
TI  - pain001 দিয়ে ISO 20022 পেমেন্ট ফাইল তৈরি স্বয়ংক্রিয়করণ — Sebastien Rousseau
PY  - 2023
UR  - https://sebastienrousseau.com/bn/2023-09-29-automating-iso-20022-compliant-payment-file-creation-with-pain001/
ER  -

Vancouver

Rousseau S. pain001 দিয়ে ISO 20022 পেমেন্ট ফাইল তৈরি স্বয়ংক্রিয়করণ — Sebastien Rousseau. sebastienrousseau.com. 2023 Sep 29. Available from: https://sebastienrousseau.com/bn/2023-09-29-automating-iso-20022-compliant-payment-file-creation-with-pain001/

Chicago

Rousseau, Sebastien. "pain001 দিয়ে ISO 20022 পেমেন্ট ফাইল তৈরি স্বয়ংক্রিয়করণ — Sebastien Rousseau." sebastienrousseau.com. September 29, 2023. https://sebastienrousseau.com/bn/2023-09-29-automating-iso-20022-compliant-payment-file-creation-with-pain001/.

APA

Rousseau, S. (2023, September 29). pain001 দিয়ে ISO 20022 পেমেন্ট ফাইল তৈরি স্বয়ংক্রিয়করণ — Sebastien Rousseau. sebastienrousseau.com. https://sebastienrousseau.com/bn/2023-09-29-automating-iso-20022-compliant-payment-file-creation-with-pain001/

এই নিবন্ধটি পুনঃপ্রকাশ করুন

pain001 দিয়ে ISO 20022 পেমেন্ট ফাইল তৈরি স্বয়ংক্রিয়করণ — Sebastien Rousseau

pain001 একটি ওপেন-সোর্স Python লাইব্রেরি যা CSV বা SQLite ডেটা থেকে ISO 20022 pain.001.001.09 XML পেমেন্ট ফাইল তৈরি করে, স্বয়ংক্রিয় XSD যাচাই, control-sum গণনা এবং SEPA SCT ও CBPR+ সীমান্ত-পার বার্তা ফরম্যাট সমর্থনসহ।

এই নিবন্ধটি লাইসেন্স করা হয়েছে Creative Commons Attribution 4.0 International. পুনঃপ্রকাশনার জন্য মূল URL-এর কৃতিত্ব আবশ্যক।

pain001 দিয়ে ISO 20022 পেমেন্ট ফাইল তৈরি স্বয়ংক্রিয়করণ — Sebastien Rousseau

pain001 একটি ওপেন-সোর্স Python লাইব্রেরি যা CSV বা SQLite ডেটা থেকে ISO 20022 pain.001.001.09 XML পেমেন্ট ফাইল তৈরি করে, স্বয়ংক্রিয় XSD যাচাই, control-sum গণনা এবং SEPA SCT ও CBPR+ সীমান্ত-পার বার্তা ফরম্যাট সমর্থনসহ।

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