ISO 20022 해설

pain.001이란? ISO 20022 계좌이체 개시 메시지 해설

기업이 계좌이체를 지시하기 위해 거래 은행에 보내는 ISO 20022 메시지: 정의, 구조, 사용할 버전, 그리고 공식 스키마 검증을 통과하는 완전한 예시.

pain.001은 기업이 거래 은행에 하나 이상의 계좌이체를 지시할 때 보내는 ISO 20022 메시지입니다. 정식 명칭은 Customer Credit Transfer Initiation입니다. "pain"은 지급 개시 메시지 계열, .001은 메시지 번호, pain.001.001.09 같은 접미사는 버전을 뜻합니다. XML 형식이며 공식 스키마(XSD)로 검증되고, 은행마다 다른 CSV 형식과 SWIFT MT101 텍스트 메시지를 대체합니다.

1분 만에 보는 pain.001#

  • 보내는 주체: 기업(지급인 또는 그를 대리하는 대리인)이 자신의 거래 은행(지급인 은행)에 보냅니다.
  • 담는 내용: 하나 이상의 계좌이체 묶음(배치)으로, 각 배치에는 출금 계좌, 요청 실행일, 그리고 수취인에게 보내는 여러 건의 지급이 들어 있습니다.
  • 돌아오는 응답: 은행은 pain.002(Customer Payment Status Report)로 응답하며, ISO 사유 코드와 함께 파일 또는 개별 거래를 승인하거나 거부합니다.
  • 그다음 단계: 승인되면 은행은 각 지시를 pacs.008 같은 은행 간 메시지로 변환하며, 기업은 이 메시지를 보지 않습니다.
  • 사용되는 곳: EPC 룰북에 따른 SEPA 계좌이체, CBPR+에 따른 Swift 해외송금(pain.001.001.09), 그리고 여러 국내 결제 제도. Pain001의 예시 코퍼스는 17개 시장의 42개 시나리오를 다룹니다.

pain.001 메시지의 구조#

모든 버전은 <CstmrCdtTrfInitn> 요소 안에 동일한 3단계 골격을 공유합니다.

단계 요소 담는 내용
1 <GrpHdr> 그룹 헤더 메시지 ID, 생성 일시, 거래 건수(NbOfTxs), 합계 검증 금액(CtrlSum), 지시 당사자
2 <PmtInf> 지급 정보 배치 하나: 지급 방법, 요청 실행일, 지급인, 지급인 계좌와 은행, 수수료 부담 주체
3 <CdtTrfTxInf> 계좌이체 거래 지급 한 건: 엔드투엔드 참조번호, 금액과 통화, 수취인, 수취인 계좌와 은행, 송금 정보

파일 하나에는 여러 개의 <PmtInf> 배치가, 배치마다 여러 건의 <CdtTrfTxInf> 지급이 들어갈 수 있습니다. NbOfTxs와 CtrlSum은 파일 수준과 배치 수준 모두에 나타나며, 집계 대상인 지급과 일치해야 합니다. 이는 은행이 파일을 거부하는 가장 흔한 이유 중 하나입니다.

pain.001 전체 예시#

pain.001.001.09 형식의 SEPA 계좌이체 한 건으로, Pain001 예시 코퍼스에서 수정 없이 가져왔습니다. 공식 ISO 20022 XSD 검증을 통과합니다. 당사자, IBAN, BIC는 모두 가상입니다.

<?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>

브라우저 데모에서 직접 데이터를 넣어 보세요. CSV로 pain.001 파일을 만들고, 데이터가 기기를 벗어나지 않은 채 공식 스키마로 검증합니다.

pain.001 버전#

ISO는 메시지 모델이 바뀌면 새 버전을 발행합니다. 은행과 결제 제도마다 받는 버전이 다르므로, 보내야 할 버전은 거래 은행의 채널 문서에 명시된 버전입니다.

버전 비고
pain.001.001.03 오랫동안 쓰여 온 SEPA와 CGI의 대표 버전. 은행을 <BIC>로 식별
.04, .05, .06, .07, .08 특정 채널에서 쓰이는 유지보수 버전
pain.001.001.09 CBPR+가 Swift용으로 채택한 2019년 버전. 은행을 <BICFI>로 식별하며 LEI와 UETR 전달을 지원
.10, .11, .12 2019년 이후 개선 버전
pain.001.001.13 2026년 3월 19일 ISO 발행. 선택 항목인 고유 거래 식별자(UnqTxIdr) 추가

호환성 매트릭스에서 Pain001이 생성·검증·상호 변환하는 버전을 확인할 수 있습니다.

메시지 방향 용도
pain.001 기업에서 거래 은행으로 계좌이체 지시(자금 송금)
pain.002 은행에서 기업으로 pain.001 또는 pain.008의 처리 상태 보고: 승인, 일부 승인 또는 거부, 사유 코드 포함
pain.008 기업에서 거래 은행으로 자동이체 출금 지시(위임에 따른 자금 회수)
pacs.008 은행 간 pain.001 지시가 변환되는 은행 간 계좌이체
MT101 기업 또는 은행, Swift 경유 pain.001이 대체하는 기존 텍스트 메시지 "Request for Transfer". Swift는 2026년 8월 은행 간 MT101 중계 폐지를 연기했습니다(Swift). MT101에서 pain.001로 참조

용어집에서 나머지 ISO 20022 용어를 쉬운 말로 설명합니다.

은행이 pain.001 파일을 거부하는 이유#

형식이 올바른 XML이라도 파일이 거부될 수 있습니다. 검사는 여러 층으로 쌓여 있습니다.

  1. 스키마: 파일은 해당 버전의 공식 XSD 검증을 통과해야 합니다.
  2. 데이터 품질: IBAN 검증 숫자가 맞고, BIC 형식이 올바르며, 날짜와 금액이 유효하고, NbOfTxs와 CtrlSum이 지급 내역과 일치해야 합니다.
  3. 결제 제도 규칙: SEPA, CBPR+, 국내 결제 제도는 허용 문자 집합이나 구조화된 우편 주소 같은 자체 제약을 추가합니다.
  4. 거래 은행의 프로필과 채널: 각 은행은 결제 제도 규칙 위에 자체 이용 가이드라인을 공개합니다.

Pain001은 파일이 은행에 도달하기 전에 처음 세 층을 검사하며, 네 번째 층은 은행이 확인해야 한다고 분명히 밝힙니다.

pain.001 파일 만드는 방법#

  • 스프레드시트에서: Excel에서 pain.001로는 Excel이나 CSV 지급 목록을 검증된 파일로 변환합니다.
  • 브라우저에서: 데모는 업로드 없이 로컬에서 파일을 생성하고 검증합니다.
  • 코드나 명령줄에서: 오픈소스 pain001 라이브러리를 설치하고 다음을 실행하세요.
pain001 -t pain.001.001.09 -d payments.csv -o out/

기술 레퍼런스는 모든 옵션을 다루고, 자주 묻는 질문은 재무, 운영, 엔지니어링 팀이 가장 많이 묻는 질문에 답합니다.

출처#