.class="img-fluid clearfix"
บทสรุปผู้บริหาร / ประเด็นสำคัญ
- ISO 20022 pain.001 (CustomerCreditTransferInitiation) คือรูปแบบข้อความ XML ที่มีโครงสร้าง ใช้สำหรับเริ่มต้นการโอนเครดิตภายใต้ SEPA (ตามกฎเกณฑ์ EPC SCT) และ CBPR+ (มาตรฐานการรับส่งข้อความข้ามพรมแดนของ SWIFT ซึ่งบังคับใช้กับธนาคารตัวแทนตั้งแต่เดือนพฤศจิกายน 2025)
- pain001 ⧉ อ่านข้อมูลการชำระเงินจาก CSV หรือ SQLite จับคู่แถวข้อมูลเข้ากับลำดับชั้นข้อความ pain.001.001.09 (GrpHdr → PmtInf → CdtTrfTxInf) และสร้างไฟล์ XML ที่สอดคล้องตามมาตรฐานผ่านตัวสร้างแบบเทมเพลต จากข้อมูลไปสู่ XML ที่ผ่านการตรวจสอบด้วยโค้ด Python เพียงสามบรรทัด
- การตรวจสอบ XSD ทำงานกับทุกไฟล์ที่สร้างขึ้นก่อนเขียนผลลัพธ์ ไลบรารีจะยกข้อยกเว้นเชิงพรรณนาที่ระบุองค์ประกอบ จำนวนสมาชิก (cardinality) หรือชนิดข้อมูลที่ไม่ตรงกัน ทำให้ตรวจพบข้อผิดพลาดตั้งแต่ตอนสร้างไฟล์แทนที่จะเป็นตอนส่งให้ธนาคาร
- CtrlSum และ NbOfTxs คำนวณจากชุดธุรกรรม ไม่ได้กรอกด้วยมือ จึงขจัดสาเหตุการปฏิเสธไฟล์การชำระเงินที่พบบ่อยที่สุดที่เกตเวย์ประมวลผลของ SEPA และ CBPR+
- รองรับข้อความทั้งแบบ SEPA Credit Transfer (สกุลเงิน EUR ภายในเขต SEPA) และ CBPR+ (ข้ามพรมแดน หลายสกุลเงิน) ผ่านพารามิเตอร์
message_typeโดยจัดการความแตกต่างของการตรวจสอบในระดับฟิลด์ภายในไลบรารีเอง
pain001 ⧉ คือไลบรารี Python โอเพนซอร์สสำหรับสร้างไฟล์เริ่มต้นการชำระเงินตาม ISO 20022 มันอ่านข้อมูลการชำระเงินจากอินพุตที่มีโครงสร้าง (CSV หรือ SQLite) ตรวจสอบความถูกต้องของข้อมูล สร้างเอกสาร XML แบบ pain.001.001.09 ที่สอดคล้องตามมาตรฐาน และตรวจสอบผลลัพธ์กับสคีมา XSD ของ ISO 20022 ทั้งหมดนี้ในการเรียกฟังก์ชันเพียงครั้งเดียว
บทความนี้อธิบายโครงสร้างข้อความ ISO 20022 pain.001 วิธีที่ pain001 จับคู่ข้อมูลอินพุตเข้ากับองค์ประกอบของข้อความ กระบวนการตรวจสอบความถูกต้อง และตัวเลือกการกำหนดค่าระหว่าง SEPA กับ CBPR+
โครงสร้างข้อความ ISO 20022 pain.001
ข้อความ ISO 20022 pain.001.001.09 (CustomerCreditTransferInitiation) มีสามระดับ:
GrpHdr (Group Header) มีหนึ่งรายการต่อไฟล์:
| Element | คำอธิบาย | ตัวอย่าง |
|---|---|---|
MsgId |
ตัวระบุข้อความที่ไม่ซ้ำกัน | ACME20240115-001 |
CreDtTm |
วันที่และเวลาที่สร้าง | 2024-01-15T09:00:00 |
NbOfTxs |
จำนวนธุรกรรมทั้งหมด | 3 |
CtrlSum |
ผลรวมของจำนวนเงินที่สั่งทั้งหมด | 15000.00 |
InitgPty/Nm |
ชื่อของฝ่ายผู้เริ่มต้น | Acme Corp |
PmtInf (Payment Information) มีหนึ่งรายการหรือมากกว่าต่อไฟล์ จัดกลุ่มธุรกรรมตามบัญชีผู้ชำระ (debtor) และวันที่ชำระเงิน:
| Element | คำอธิบาย |
|---|---|
PmtInfId |
ตัวระบุข้อมูลการชำระเงิน |
PmtMtd |
วิธีการชำระเงิน เป็น TRF เสมอสำหรับการโอนเครดิต |
ReqdExctnDt/Dt |
วันที่ขอให้ดำเนินการ |
Dbtr/Nm |
ชื่อผู้ชำระ (ผู้ส่ง) |
DbtrAcct/Id/IBAN |
IBAN ของผู้ชำระ |
DbtrAgt/FinInstnId/BICFI |
BIC ของธนาคารผู้ชำระ |
CdtTrfTxInf (Credit Transfer Transaction Information) มีหนึ่งรายการหรือมากกว่าต่อบล็อก PmtInf หนึ่งบล็อก:
| Element | คำอธิบาย |
|---|---|
PmtId/EndToEndId |
การอ้างอิงแบบต้นทางถึงปลายทาง (รักษาไว้ตลอดทั้งสายการประมวลผล) |
Amt/InstdAmt |
จำนวนเงินที่สั่งพร้อมแอตทริบิวต์สกุลเงิน |
CdtrAgt/FinInstnId/BICFI |
BIC ของธนาคารผู้รับ (creditor) |
Cdtr/Nm |
ชื่อผู้รับ (creditor) |
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 จะตรวจสอบผลลัพธ์กับสคีมา XSD ของ ISO 20022 pain.001.001.09 การตรวจสอบครอบคลุม:
- การมีอยู่ขององค์ประกอบที่บังคับ: GrpHdr/MsgId, GrpHdr/CreDtTm, GrpHdr/NbOfTxs, GrpHdr/CtrlSum ล้วนเป็นข้อบังคับ หากขาดองค์ประกอบใดจะเกิดข้อผิดพลาดในการตรวจสอบ
- ข้อจำกัดด้านชนิดข้อมูล: รูปแบบ IBAN, รูปแบบ BIC (8 หรือ 11 อักขระ), ความละเอียดของจำนวนเงิน (สูงสุด 18 หลัก ทศนิยม 5 ตำแหน่ง)
- จำนวนสมาชิก (cardinality): อย่างน้อยหนึ่ง
CdtTrfTxInfต่อหนึ่งPmtInfและอย่างน้อยหนึ่งPmtInfต่อหนึ่งเอกสาร - ค่าที่กำหนดไว้ (enumeration):
PmtMtdต้องเป็นTRFสำหรับการโอนเครดิต และCcyต้องเป็นรหัสสกุลเงิน ISO 4217 ที่ถูกต้อง
เมื่อการตรวจสอบล้มเหลว pain001 จะยก ValidationError พร้อมข้อความแสดงข้อผิดพลาดจาก lxml ที่ระบุนิพจน์ XPath องค์ประกอบ และข้อจำกัดที่ล้มเหลว วิธีนี้ทำให้การกำหนดค่าที่ผิดพลาดปรากฏตั้งแต่ตอนสร้างไฟล์แทนที่จะเป็นตอนส่งให้ธนาคาร ซึ่งรหัสการปฏิเสธมักมีรายละเอียดน้อยกว่า
การกำหนดค่า SEPA เทียบกับ CBPR+
SEPA Credit Transfer (ISO 20022 pain.001.001.09 ภายใต้กฎเกณฑ์ EPC SCT) และ CBPR+ (มาตรฐาน Cross-Border Payments and Reporting Plus ของ 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) เริ่มต้นการหักบัญชีอัตโนมัติ โดยธนาคารของผู้รับ (creditor) จะเรียกเก็บเงินจากผู้ชำระ (debtor) ไลบรารี pain001 สร้างเฉพาะไฟล์ pain.001 เท่านั้น
pain001 รองรับ ISO 20022 เวอร์ชันใด?
เวอร์ชันหลักคือ 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 ที่จำเป็น
เอกสารอ้างอิง
- 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
- SWIFT. CBPR+ Usage Guidelines — Customer Credit Transfer Initiation (pain.001). SWIFT Standards, 2023. https://www.swift.com/standards/iso-20022/cbpr-plus-usage-guidelines
- ISO. ISO 20022 — Financial services — Universal financial industry message scheme. ISO.org, 2023. https://www.iso20022.org/
- Rousseau, S. pain001 — ISO 20022 payment file generator. GitHub, 2023. https://github.com/sebastienrousseau/pain001
ทบทวนล่าสุด .
เผยแพร่บทความนี้ซ้ำ
คัดลอกรูปแบบสำหรับ Medium
# การสร้างไฟล์การชำระเงิน ISO 20022 แบบอัตโนมัติด้วย pain001 — Sebastien Rousseau > Originally published at [https://sebastienrousseau.com/th/2023-09-29-attanomat-fai-chamra-nguen-iso-20022-duai-pain001/](https://sebastienrousseau.com/th/2023-09-29-attanomat-fai-chamra-nguen-iso-20022-duai-pain001/) สร้างไฟล์การชำระเงิน pain.001 ตาม ISO 20022 จาก CSV หรือ SQLite แบบอัตโนมัติ pain001 คือไลบรารี Python โอเพนซอร์สที่ทำให้การปฏิบัติตามข้อกำหนดเป็นเรื่องง่ายขึ้น Read the full article on sebastienrousseau.com: https://sebastienrousseau.com/th/2023-09-29-attanomat-fai-chamra-nguen-iso-20022-duai-pain001/
คัดลอกรูปแบบสำหรับ Mastodon
การสร้างไฟล์การชำระเงิน ISO 20022 แบบอัตโนมัติด้วย pain001 — Sebastien Rousseau สร้างไฟล์การชำระเงิน pain.001 ตาม ISO 20022 จาก CSV หรือ SQLite แบบอัตโนมัติ pain001 คือไลบรารี Python โอเพนซอร์สที่ทำให้การปฏิบัติตามข้อกำหนดเป็นเรื่องง่ายขึ้น https://sebastienrousseau.com/th/2023-09-29-attanomat-fai-chamra-nguen-iso-20022-duai-pain001/
คัดลอกที่จัดรูปแบบสำหรับ LinkedIn
การสร้างไฟล์การชำระเงิน ISO 20022 แบบอัตโนมัติด้วย pain001 — Sebastien Rousseau สร้างไฟล์การชำระเงิน pain.001 ตาม ISO 20022 จาก CSV หรือ SQLite แบบอัตโนมัติ pain001 คือไลบรารี Python โอเพนซอร์สที่ทำให้การปฏิบัติตามข้อกำหนดเป็นเรื่องง่ายขึ้น. นี่คือประเด็นเชิงกลยุทธ์ที่สำคัญ: - โครงสร้างข้อความ ISO 20022 pain.001. ข้อความ ISO 20022 pain.001.001.09 (CustomerCreditTransferInitiation) มีสามระดับ:. - การสร้าง XML จาก CSV. การเรียกใช้ pain001 อย่างพื้นฐานที่สุด:. - โครงสร้าง XML ที่สร้างขึ้น. เอกสาร pain.001.001.09 ที่สร้างอย่างถูกต้องสำหรับแถว CSV ข้างต้น:. - กระบวนการตรวจสอบด้วย XSD. หลังจากสร้างเอกสารแล้ว pain001 จะตรวจสอบผลลัพธ์กับสคีมา XSD ของ ISO 20022 pain.001.001.09 การตรวจสอบครอบคลุม:. แนวทางขององค์กรของคุณในการรับมือกับความท้าทายที่ระบุไว้ในบทความนี้คืออะไร? → https://sebastienrousseau.com/th/2023-09-29-attanomat-fai-chamra-nguen-iso-20022-duai-pain001/ #Pain001 #Iso20022 #Pain.001.001.09 #Customercredittransferinitiation #SepaCreditTransfer Sebastien Rousseau | CC-BY-4.0
อ้างอิงบทความนี้
การสร้างไฟล์การชำระเงิน ISO 20022 แบบอัตโนมัติด้วย pain001 — Sebastien Rousseau
สร้างไฟล์การชำระเงิน pain.001 ตาม ISO 20022 จาก CSV หรือ SQLite แบบอัตโนมัติ pain001 คือไลบรารี Python โอเพนซอร์สที่ทำให้การปฏิบัติตามข้อกำหนดเป็นเรื่องง่ายขึ้น
BibTeX
@online{rousseau2023การสร,
author = {Rousseau, Sebastien},
title = {{การสร้างไฟล์การชำระเงิน ISO 20022 แบบอัตโนมัติด้วย pain001 — Sebastien Rousseau}},
year = {2023},
url = {https://sebastienrousseau.com/th/2023-09-29-attanomat-fai-chamra-nguen-iso-20022-duai-pain001/},
urldate = {2023}
}RIS
TY - GEN AU - Rousseau, Sebastien TI - การสร้างไฟล์การชำระเงิน ISO 20022 แบบอัตโนมัติด้วย pain001 — Sebastien Rousseau PY - 2023 UR - https://sebastienrousseau.com/th/2023-09-29-attanomat-fai-chamra-nguen-iso-20022-duai-pain001/ ER -
Vancouver
Rousseau S. การสร้างไฟล์การชำระเงิน ISO 20022 แบบอัตโนมัติด้วย pain001 — Sebastien Rousseau. sebastienrousseau.com. 2023 Sep 29. Available from: https://sebastienrousseau.com/th/2023-09-29-attanomat-fai-chamra-nguen-iso-20022-duai-pain001/
Chicago
Rousseau, Sebastien. "การสร้างไฟล์การชำระเงิน ISO 20022 แบบอัตโนมัติด้วย pain001 — Sebastien Rousseau." sebastienrousseau.com. September 29, 2023. https://sebastienrousseau.com/th/2023-09-29-attanomat-fai-chamra-nguen-iso-20022-duai-pain001/.
APA
Rousseau, S. (2023, September 29). การสร้างไฟล์การชำระเงิน ISO 20022 แบบอัตโนมัติด้วย pain001 — Sebastien Rousseau. sebastienrousseau.com. https://sebastienrousseau.com/th/2023-09-29-attanomat-fai-chamra-nguen-iso-20022-duai-pain001/
เผยแพร่บทความนี้ซ้ำ
การสร้างไฟล์การชำระเงิน ISO 20022 แบบอัตโนมัติด้วย pain001 — Sebastien Rousseau
สร้างไฟล์การชำระเงิน pain.001 ตาม ISO 20022 จาก CSV หรือ SQLite แบบอัตโนมัติ pain001 คือไลบรารี Python โอเพนซอร์สที่ทำให้การปฏิบัติตามข้อกำหนดเป็นเรื่องง่ายขึ้น
บทความนี้เผยแพร่ภายใต้สัญญาอนุญาต Creative Commons Attribution 4.0 International. การเผยแพร่ซ้ำต้องระบุที่มาเป็น URL ต้นฉบับ
การสร้างไฟล์การชำระเงิน ISO 20022 แบบอัตโนมัติด้วย pain001 — Sebastien Rousseau สร้างไฟล์การชำระเงิน pain.001 ตาม ISO 20022 จาก CSV หรือ SQLite แบบอัตโนมัติ pain001 คือไลบรารี Python โอเพนซอร์สที่ทำให้การปฏิบัติตามข้อกำหนดเป็นเรื่องง่ายขึ้น Originally published at https://sebastienrousseau.com/th/2023-09-29-attanomat-fai-chamra-nguen-iso-20022-duai-pain001/ by Sebastien Rousseau. Licensed under CC-BY-4.0.