Giải thích ISO 20022

pain.001 là gì? Thông điệp khởi tạo chuyển khoản ISO 20022

Thông điệp ISO 20022 mà doanh nghiệp gửi ngân hàng để ra lệnh chuyển khoản: nó là gì, được cấu trúc ra sao, nên dùng phiên bản nào, và một ví dụ đầy đủ hợp lệ theo lược đồ chính thức.

pain.001 là thông điệp ISO 20022 mà doanh nghiệp gửi ngân hàng của mình để ra lệnh một hoặc nhiều giao dịch chuyển khoản. Tên đầy đủ là Customer Credit Transfer Initiation (khởi tạo chuyển khoản của khách hàng): "pain" là nhóm thông điệp khởi tạo thanh toán, .001 là số hiệu thông điệp, còn hậu tố, chẳng hạn pain.001.001.09, là phiên bản. Đây là XML, được kiểm định theo một lược đồ chính thức (XSD) và thay thế các định dạng CSV riêng của từng ngân hàng cũng như thông điệp văn bản SWIFT MT101.

pain.001 trong một phút#

  • Ai gửi: doanh nghiệp (bên trả tiền, hoặc một bên đại diện) gửi thông điệp cho chính ngân hàng của mình (ngân hàng của bên trả tiền).
  • Chứa gì: một hoặc nhiều lô chuyển khoản, mỗi lô có một tài khoản bên trả tiền, một ngày thực hiện yêu cầu và số lượng khoản thanh toán tùy ý cho bên nhận.
  • Nhận lại gì: ngân hàng phản hồi bằng pain.002, báo cáo trạng thái thanh toán của khách hàng, chấp nhận hoặc từ chối cả tệp hay từng giao dịch kèm mã lý do ISO.
  • Tiếp theo là gì: sau khi chấp nhận, ngân hàng chuyển mỗi lệnh thành các thông điệp liên ngân hàng như pacs.008, mà doanh nghiệp không bao giờ nhìn thấy.
  • Được dùng ở đâu: chuyển khoản SEPA theo bộ quy tắc của EPC, thanh toán xuyên biên giới trên Swift theo CBPR+ (pain.001.001.09) và nhiều hệ thống thanh toán nội địa. Kho ví dụ của Pain001 bao gồm 42 kịch bản tại 17 thị trường.

Cấu trúc của một thông điệp pain.001#

Mọi phiên bản đều có chung bộ khung ba cấp bên trong phần tử <CstmrCdtTrfInitn>.

Cấp Phần tử Nội dung
1 <GrpHdr> Tiêu đề nhóm Mã thông điệp, thời điểm tạo, số giao dịch (NbOfTxs), tổng kiểm soát (CtrlSum), bên khởi tạo
2 <PmtInf> Thông tin thanh toán Một lô: phương thức thanh toán, ngày thực hiện yêu cầu, bên trả tiền, tài khoản và ngân hàng của bên trả tiền, bên chịu phí
3 <CdtTrfTxInf> Giao dịch chuyển khoản Một khoản thanh toán: mã tham chiếu đầu cuối, số tiền và loại tiền, bên nhận, tài khoản và ngân hàng của bên nhận, nội dung chuyển tiền

Một tệp có thể chứa nhiều lô <PmtInf>, và mỗi lô chứa nhiều khoản thanh toán <CdtTrfTxInf>. NbOfTxs và CtrlSum xuất hiện ở cả cấp tệp lẫn cấp lô và phải khớp với các khoản thanh toán mà chúng đếm; đây là một trong những lý do phổ biến nhất khiến ngân hàng từ chối tệp.

Một ví dụ pain.001 đầy đủ#

Đây là một giao dịch chuyển khoản SEPA đơn lẻ ở định dạng pain.001.001.09, lấy nguyên vẹn từ kho ví dụ của Pain001. Tệp vượt qua kiểm định theo XSD chính thức của ISO 20022. Các bên, IBAN và BIC đều là hư cấu.

<?xml version='1.0' encoding='UTF-8'?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09">
  <CstmrCdtTrfInitn>
    <GrpHdr>
      <MsgId>OML-SCT-20260921</MsgId>
      <CreDtTm>2026-09-21T12:00:00</CreDtTm>
      <NbOfTxs>1</NbOfTxs>
      <CtrlSum>2200.00</CtrlSum>
      <InitgPty>
        <Nm>Officine Meccaniche Lombarde SpA</Nm>
        <PstlAdr>
          <PstCd>20123</PstCd>
          <TwnNm>Milano</TwnNm>
          <Ctry>IT</Ctry>
          <AdrLine>Via Torino 15</AdrLine>
        </PstlAdr>
      </InitgPty>
    </GrpHdr>
    <PmtInf>
      <PmtInfId>SCT-20260921-IT-01</PmtInfId>
      <PmtMtd>TRF</PmtMtd>
      <BtchBookg>false</BtchBookg>
      <NbOfTxs>1</NbOfTxs>
      <CtrlSum>2200.00</CtrlSum>
      <PmtTpInf>
        <SvcLvl>
          <Cd>SEPA</Cd>
        </SvcLvl>
      </PmtTpInf>
      <ReqdExctnDt>
        <Dt>2026-09-22</Dt>
      </ReqdExctnDt>
      <Dbtr>
        <Nm>Officine Meccaniche Lombarde SpA</Nm>
        <PstlAdr>
          <PstCd>20123</PstCd>
          <TwnNm>Milano</TwnNm>
          <Ctry>IT</Ctry>
          <AdrLine>Via Torino 15</AdrLine>
        </PstlAdr>
      </Dbtr>
      <DbtrAcct>
        <Id>
          <IBAN>IT48T78971134594OGDKY5VXE41</IBAN>
        </Id>
      </DbtrAcct>
      <DbtrAgt>
        <FinInstnId>
          <BICFI>TLAOIT60</BICFI>
        </FinInstnId>
      </DbtrAgt>
      <ChrgBr>SLEV</ChrgBr>
      <CdtTrfTxInf>
        <PmtId>
          <EndToEndId>OML-2026-0921-01</EndToEndId>
        </PmtId>
        <Amt>
          <InstdAmt Ccy="EUR">2200.00</InstdAmt>
        </Amt>
        <CdtrAgt>
          <FinInstnId>
            <BICFI>MHXHITI0</BICFI>
          </FinInstnId>
        </CdtrAgt>
        <Cdtr>
          <Nm>Fonderia Bresciana Srl</Nm>
          <PstlAdr>
            <PstCd>25121</PstCd>
            <TwnNm>Brescia</TwnNm>
            <Ctry>IT</Ctry>
          </PstlAdr>
        </Cdtr>
        <CdtrAcct>
          <Id>
            <IBAN>IT23J14887404856NF3794IGWXN</IBAN>
          </Id>
        </CdtrAcct>
        <RmtInf>
          <Ustrd>Fattura 117/2026</Ustrd>
        </RmtInf>
      </CdtTrfTxInf>
    </PmtInf>
  </CstmrCdtTrfInitn>
</Document>

Hãy thử với dữ liệu của bạn trong bản demo trên trình duyệt: công cụ tạo tệp pain.001 từ CSV và kiểm định theo lược đồ chính thức mà dữ liệu không rời khỏi máy của bạn.

Các phiên bản pain.001#

ISO phát hành phiên bản mới khi mô hình thông điệp thay đổi. Mỗi ngân hàng và hệ thống thanh toán chấp nhận những phiên bản nhất định, vì vậy phiên bản bạn gửi là phiên bản được nêu trong tài liệu kênh của ngân hàng.

Phiên bản Ghi chú
pain.001.001.03 Phiên bản chủ lực lâu năm của SEPA và CGI; nhận diện ngân hàng bằng <BIC>
.04, .05, .06, .07, .08 Các phiên bản bảo trì được một số kênh sử dụng
pain.001.001.09 Phiên bản 2019 được CBPR+ chọn cho Swift; nhận diện ngân hàng bằng <BICFI>, bổ sung khả năng mang LEI và UETR
.10, .11, .12 Các bản cải tiến sau năm 2019
pain.001.001.13 Được ISO công bố ngày 19 tháng 3 năm 2026; bổ sung mã định danh giao dịch duy nhất tùy chọn (UnqTxIdr)

Ma trận tương thích cho biết Pain001 tạo, kiểm định và chuyển đổi giữa những phiên bản nào.

Thông điệp Chiều Mục đích
pain.001 Từ doanh nghiệp đến ngân hàng của mình Ra lệnh chuyển khoản (chuyển tiền đi)
pain.002 Từ ngân hàng đến doanh nghiệp Báo cáo trạng thái của pain.001 hoặc pain.008: được chấp nhận, chấp nhận một phần hoặc bị từ chối, kèm mã lý do
pain.008 Từ doanh nghiệp đến ngân hàng của mình Ra lệnh ghi nợ trực tiếp (thu tiền theo ủy quyền)
pacs.008 Giữa các ngân hàng Giao dịch chuyển khoản liên ngân hàng mà một lệnh pain.001 được chuyển thành
MT101 Doanh nghiệp hoặc ngân hàng, qua Swift Thông điệp văn bản cũ "Request for Transfer" mà pain.001 thay thế. Tháng 8 năm 2026, Swift đã hoãn việc ngừng cơ chế chuyển tiếp MT101 liên ngân hàng (Swift); xem từ MT101 sang pain.001

Bảng thuật ngữ giải thích phần còn lại của thuật ngữ ISO 20022 bằng ngôn ngữ dễ hiểu.

Vì sao ngân hàng từ chối tệp pain.001#

Một tệp có thể là XML hợp lệ về cú pháp mà vẫn bị từ chối. Các bước kiểm tra chồng lên nhau theo từng lớp:

  1. Lược đồ: tệp phải vượt qua kiểm định theo XSD chính thức của phiên bản tương ứng.
  2. Chất lượng dữ liệu: IBAN đúng chữ số kiểm tra, BIC đúng định dạng, ngày và số tiền hợp lệ, và NbOfTxs cùng CtrlSum khớp với các khoản thanh toán.
  3. Quy tắc hệ thống thanh toán: SEPA, CBPR+ và các hệ thống nội địa bổ sung ràng buộc riêng, như bộ ký tự được phép hoặc địa chỉ bưu chính có cấu trúc.
  4. Hồ sơ và kênh của ngân hàng bạn: mỗi ngân hàng công bố hướng dẫn sử dụng riêng bên trên quy tắc của hệ thống.

Pain001 kiểm tra ba lớp đầu tiên trước khi tệp đến ngân hàng và nêu rõ rằng lớp thứ tư do ngân hàng xác nhận.

Cách tạo tệp pain.001#

  • Từ bảng tính: từ Excel sang pain.001 chuyển danh sách thanh toán Excel hoặc CSV thành một tệp đã được kiểm định.
  • Trên trình duyệt: bản demo tạo và kiểm định tệp ngay trên máy, không cần tải lên.
  • Từ mã nguồn hoặc dòng lệnh: cài đặt thư viện pain001 mã nguồn mở và chạy:
pain001 -t pain.001.001.09 -d payments.csv -o out/

Tài liệu kỹ thuật trình bày mọi tùy chọn, còn phần câu hỏi thường gặp trả lời những câu hỏi mà các nhóm ngân quỹ, vận hành và kỹ thuật hay đặt ra nhất.

Nguồn tham khảo#