ISO20022 payments

Output Files

22min
when we process your payment instructions, it creates xml output files (psrs) conforming to the iso 20022 standard’s pain 002 001 03 format the output files provide information about the status of your transactions within cross river’s (cr) banking core, such as whether the transactions were accepted or rejected instead of an acknowledgment file followed by a psr later on, cross river sends you the psr immediately for more information on status and error codes, see status and error codes docid 4igvhbrp8ngyaux3xyzna output file naming convention the output file psrs conform to the following naming convention {inputfilename} {date} {time} {number} where "number" is the ordinal number of file from the specified date and time, and is used to differentiate among multiple possible files that were generated at that date and time if only one file was generated at that date and time, the value of "number" will be "1" how an output file is built the root element in the output file is cstmrpmtstsrpt (customer payment status report) and it contains the following 3 building blocks grphdr that contains the file metadata orgnlgrpinfandsts contains message identifiers based on the original input file and includes a status for the group orgnlpmtinfandsts contains elements referencing the original transactions this is an optional section that may appear multiple times in the file it can contain an individual status for the original instruction, as well as elements from your original transaction file here’s an example of the file structure \<?xml version="1 0" encoding="utf 8" standalone="yes" ?> \<document xmlns='urn\ iso\ std\ iso 20022\ tech\ xsd\ pain 002 001 03' xmlns\ xsi='http //www w3 org/2001/xmlschema instance'> \<cstmrpmtstsrpt> \<grphdr> \</grphdr> \<orgnlgrpinfandsts> \</orgnlgrpinfandsts> \<orgnlpmtinfandsts> \<txinfandsts> \</txinfandsts> \</orgnlpmtinfandsts> \</cstmrpmtstsrpt> \</document> the group header the grphdr block is a set of characteristics shared by all individual transactions included in the message this building block is present once per output file the group header includes the following elements \<grphdr> \<msgid>11000000000a0a0\</msgid> \<credttm>2016 05 10t15 20 06 719z\</credttm> \<initgpty> \</initgpty> \</grphdr> msgid message id a unique id that we generate for the file it is unique per instructed party for a pre agreed period best practice use a new for each file credttm created date and time this is the date and time at which the output file was created initgpty initiating party this element is used to indicate the party that initiated the file with the output files this will always be cr the initgpty block appears as follows \<initgpty> \<nm>john doe corporation\</nm> \<id>\<orgid> \<bicorbei>johndoe99\</bicorbei> \</orgid>\</id> \</initgpty> nm name used to identify the initiating party id the unique identifier for the initiating party orgid organization identification, containing the bicorbei code bicorbei business identification code a unique and unambiguous identifier of the initiating party, which can be an organization or an individual person original group information and status various information can be included for the group in the orgnlgrpinfandsts block the information included will depend on the input file and the status of the original transaction orgnlmsgid is the message identification number from the original input file orgnlmsgnmid indicates the original message type, and will either be pain 001 001 03 for payments (usd) or pain 008 001 02 for direct debits (usd) orgnlnboftxs shows the number of transactions in the original input file orgnlctrlsum displays the control sum from the original input file grpsts indicates the status for a group of transactions see here for details about the different statuses addtlinf shows details for the status in the case of a rejected file the rejection reason can be due to an issue with the original xml file, as well as an issue arising during internal processing by cr the original transaction file was accepted the following example of the orgnlgrpinfandsts block shows that the original input transaction file was accepted you can see this in the grpsts element, where "actc" indicates the file was accepted \<orgnlgrpinfandsts> \<orgnlmsgid>abcdefg090301\</orgnlmsgid> \<orgnlmsgnmid>pain 001 001 03\</orgnlmsgnmid> \<orgnlnboftxs>1\</orgnlnboftxs> \<orgnlctrlsum>42720 80\</orgnlctrlsum> \<grpsts>actc\</grpsts> \</orgnlgrpinfandsts> the original transaction file was rejected the following example of the orgnlgrpinfandsts block shows that the original input transaction file was rejected you can see this in the grpsts element, where "rjct" indicates the file was rejected in this case, the output file will include the stsrsninf element, which gives information about why the initial transaction was rejected the reason will always be shown in the addtlinf element if your original transaction file is rejected, you should correct any errors and resend it to cr in this example, the reason the file was rejected is shown as “number of transactions in file does not match with control record expected 1, but calculated 2” this means that there is a mismatch between the orgnlctrlsum provided in the original file and the actual number of transactions provided there \<orgnlgrpinfandsts> \<orgnlmsgid>abcdefg090301\</orgnlmsgid> \<orgnlmsgnmid>pain 001 001 03\</orgnlmsgnmid> \<orgnlcredttm>2015 08 10t10 48 47\</orgnlcredttm> \<grpsts>rjct\</grpsts> \<stsrsninf> \<rsn> \<cd>narr\</cd> \</rsn> \<addtlinf>number of transactions in file does not match with control record expected 1, but calculated 2\</addtlinf> \</stsrsninf> \</orgnlgrpinfandsts> original payment information and status orgnlpmtinfandsts is a third and optional block, which contains elements referencing the original transactions it corresponds to the batch level in the original file (specifically the pmtinf block), and can also include individual statuses for the original instructions \<orgnlpmtinfandsts> \<orgnlpmtinfid>abcdefg00065\</orgnlpmtinfid> \<orgnlnboftxs>1\</orgnlnboftxs> \<orgnlctrlsum>42720 80\</orgnlctrlsum> \<pmtinfsts>actc\</pmtinfsts> \<txinfandsts> \</txinfandsts> \</orgnlpmtinfandsts> orgnlpmtinfid is a unique identifier, assigned by the original initiating party it’s used to identify the original payment information block within the output file orgnlnboftxs indicates the number of payments in the original payment information block orgnlctrlsum shows the sum total of all transactions included in the original payment information block pmtinfsts indicates the status of the payment information block as follows payment info status meaning actc the batch was validated and authenticated successfully rcvd the batch is being checked rjct the batch was rejected pdng one or more transactions in the batch is pending part the transaction batch was partially accepted and partially rejected this means that the batch includes one or more rejected transactions as well as one or more transactions that have been accepted in the output file generated, you’ll be able to see which transactions were rejected so you can make the necessary changes and resend to cr if your original transaction file is rejected, you should correct any errors and resend to cr transaction level information the output file can include information about individual instructions in the original file in a building block called txinfandsts this will be included as part of the orgnlpmtinfandsts building block the transaction level information includes the following orgnlinstrid contains the value of the instruction identification ( instrid ) element provided in the input file this element won’t be present if an instrid value wasn’t provided in the input file orgnlendtoendid contains the value of the endtoendid element provided in the input file txsts indicates the transaction status using one of the following codes status meaning acpt the transaction has been accepted by the external payment processor for processing rjct the transaction was rejected ascs the transaction has been completed and the settlement has been confirmed on the debtor's account acsp the transaction was accepted and has been moved on for processing pdng the transaction is pending and requires further processing in addition, the txinfandsts block contains the following elements orgnltxref contains information on the original transaction in its child elements, such as the transaction amount and the transaction's requested execution date amt contains the amount of the original transaction in a child element instdamt contains the amount of the original transaction in the indicated currency reqdextndt requested execution date the date on which the originator's account was to be debited if the status is shown as rjct (rejected) an additional element, stsrsninf , will be included in the txinfandsts block this will provide information on why the transaction was rejected here’s an example of the txinfandsts building block for when a transaction has succeeded \<txinfandsts> \<orgnlinstrid>abcdefg000000\</orgnlinstrid> \<orgnlendtoendid>0000000000001011\</orgnlendtoendid> \<txsts>acsc\</txsts> \<orgnltxref> \<amt> \<instdamt ccy="usd">42720 80\</instdamt> \</amt> \<reqdexctndt>2016 05 10\</reqdexctndt> \</orgnltxref> \</txinfandsts> below is an example the txinfandsts building block for when a transaction has been rejected \<txinfandsts> \<orgnlinstrid>abcdefg000000\</orgnlinstrid> \<orgnlendtoendid>0000000000001011\</orgnlendtoendid> \<txsts>rjct\</txsts> \<stsrsninf> \<rsn> \<cd>narr\</cd> \</rsn> \<addtlinf>the account 1234567890 is not setup in unicorn for client {clientid} please reach out to the client integration team \</addtlinf> \</stsrsninf> \</txinfandsts> the stsrsninf block, which appears inside the txinfandsts block in the case of a rejected transaction, contains information on why the transaction was rejected, and contains the following elements rsn contains the reason code in a child element cd code currently, this code will always have the value of narr, standing for "narrative" the actual narrative text appears in the addtlinf element addtlinf shows details for the status in the case of a rejected file the rejection reason can be due to an issue with the original xml file, as well as an issue arising during internal processing by cr full sample output files sample output files (successful transaction) the examples below shows full output files generated when we have successfully processed the transaction file, for both the pain 001 001 03 and pain 008 001 002 formats these examples include the group header, original information and status, and original payment information and status blocks output example from pain 001 001 03 input file (successful transaction) the following is an example output file corresponding to a pain 001 001 03 input file, generated when the processing of the transaction file has succeeded \<?xml version="1 0" encoding="utf 8" standalone="yes"?> \<document xmlns="urn\ iso\ std\ iso 20022\ tech\ xsd\ pain 002 001 03" xmlns\ xsi="http //www w3 org/2001/xmlschema instance"> \<cstmrpmtstsrpt> \<grphdr> \<msgid>abcdefg0000000\</msgid> \<credttm>2020 09 15t15 58 04 637z\</credttm> \<initgpty> \<nm>john doe corporation\</nm> \<id> \<orgid> \<bicorbei>johndoe99\</bicorbei> \</orgid> \</id> \</initgpty> \</grphdr> \<orgnlgrpinfandsts> \<orgnlmsgid>ambcd10000000\</orgnlmsgid> \<orgnlmsgnmid>pain 001 001 03\</orgnlmsgnmid> \<orgnlnboftxs>3\</orgnlnboftxs> \<orgnlctrlsum>5 0100\</orgnlctrlsum> \<grpsts>actc\</grpsts> \</orgnlgrpinfandsts> \<orgnlpmtinfandsts> \<orgnlpmtinfid>abcd10000000\</orgnlpmtinfid> \<orgnlnboftxs>3\</orgnlnboftxs> \<orgnlctrlsum>5 0100\</orgnlctrlsum> \<pmtinfsts>actc\</pmtinfsts> \<txinfandsts> \<orgnlinstrid>100abcd012345\</orgnlinstrid> \<orgnlendtoendid>0000000000000108\</orgnlendtoendid> \<clrsysref>46456456\</clrsysref> \<txsts>acsp\</txsts> \</txinfandsts> \</orgnlpmtinfandsts> \</cstmrpmtstsrpt> \</document> output example from pain 008 001 02 input file (successful transaction) the following is an example output file corresponding to a pain 008 001 02 input file, generated when the processing of the transaction file has succeeded \<?xml version="1 0" encoding="utf 8" standalone="yes"?> \<document xmlns="urn\ iso\ std\ iso 20022\ tech\ xsd\ pain 002 001 03" xmlns\ xsi="http //www w3 org/2001/xmlschema instance"> \<cstmrpmtstsrpt> \<grphdr> \<msgid>abcdefg0123456789\</msgid> \<credttm>2020 11 02t11 30 11 055z\</credttm> \<initgpty> \<nm>john doe corporation\</nm> \<id> \<orgid> \<bicorbei>johndoe99\</bicorbei> \</orgid> \</id> \</initgpty> \</grphdr> \<orgnlgrpinfandsts> \<orgnlmsgid>dd1\</orgnlmsgid> \<orgnlmsgnmid>pain 008 001 02\</orgnlmsgnmid> \<orgnlnboftxs>3\</orgnlnboftxs> \<orgnlctrlsum>6 0000\</orgnlctrlsum> \<grpsts>actc\</grpsts> \</orgnlgrpinfandsts> \<orgnlpmtinfandsts> \<orgnlpmtinfid>dd1 1\</orgnlpmtinfid> \<orgnlnboftxs>3\</orgnlnboftxs> \<orgnlctrlsum>6 0000\</orgnlctrlsum> \<pmtinfsts>actc\</pmtinfsts> \<txinfandsts> \<orgnlendtoendid>dd1 1\</orgnlendtoendid> \<clrsysref>012345678901234\</clrsysref> \<txsts>acsp\</txsts> \</txinfandsts> \<txinfandsts> \<orgnlendtoendid>dd1 2\</orgnlendtoendid> \<clrsysref>012345678901234\</clrsysref> \<txsts>acsp\</txsts> \</txinfandsts> \<txinfandsts> \<orgnlendtoendid>dd1 3\</orgnlendtoendid> \<clrsysref>012345678901234\</clrsysref> \<txsts>acsp\</txsts> \</txinfandsts> \</orgnlpmtinfandsts> \</cstmrpmtstsrpt> \</document> sample output files (rejected transaction file) the examples below show full output files generated when the transaction file has been rejected in such output files, the error message information appears in the tag rejected file (error on batch level) the following example shows an output file generated when the transaction file has been rejected on the batch level, for an original file that came in pain 008 001 02 format \<?xml version="1 0" encoding="utf 8" standalone="yes"?> \<document xmlns="urn\ iso\ std\ iso 20022\ tech\ xsd\ pain 002 001 03" xmlns\ xsi="http //www w3 org/2001/xmlschema instance"> \<cstmrpmtstsrpt> \<grphdr> \<msgid>abcdefg012345689\</msgid> \<credttm>2020 11 02t07 56 06 228z\</credttm> \<initgpty> \<nm>john doe corporation\</nm> \<id> \<orgid> \<bicorbei>johndoe99\</bicorbei> \</orgid> \</id> \</initgpty> \</grphdr> \<orgnlgrpinfandsts> \<orgnlmsgnmid>pain 008 001 02\</orgnlmsgnmid> \<orgnlnboftxs>0\</orgnlnboftxs> \<orgnlctrlsum>0 0000\</orgnlctrlsum> \<grpsts>rjct\</grpsts> \<stsrsninf> \<rsn> \<cd>narr\</cd> \</rsn> \<addtlinf>\<!\[cdata\[error parsing file examplefile xml the 'msgid' start tag on line 5 position 5 does not match the end tag of 'grphdr' line 19, position 5 ]]>\</addtlinf> \</stsrsninf> \</orgnlgrpinfandsts> \</cstmrpmtstsrpt> \</document> rejected file (error on transaction level) the following example shows an output file generated when the transaction file has been rejected on the transaction level, for an original file that came in pain 001 001 003 format \<?xml version="1 0" encoding="utf 8" standalone="yes"?> \<document xmlns="urn\ iso\ std\ iso 20022\ tech\ xsd\ pain 002 001 03" xmlns\ xsi="http //www w3 org/2001/xmlschema instance"> \<cstmrpmtstsrpt> \<grphdr> \<msgid>abcdefg0123456789\</msgid> \<credttm>2020 10 26t11 49 33 620z\</credttm> \<initgpty> \<nm>john doe corporation\</nm> \<id> \<orgid> \<bicorbei>johndoe99\</bicorbei> \</orgid> \</id> \</initgpty> \</grphdr> \<orgnlgrpinfandsts> \<orgnlmsgid>missing2\</orgnlmsgid> \<orgnlmsgnmid>pain 001 001 03\</orgnlmsgnmid> \<orgnlnboftxs>3\</orgnlnboftxs> \<orgnlctrlsum>5 0400\</orgnlctrlsum> \<grpsts>actc\</grpsts> \</orgnlgrpinfandsts> \<orgnlpmtinfandsts> \<orgnlpmtinfid>missing2\</orgnlpmtinfid> \<orgnlnboftxs>3\</orgnlnboftxs> \<orgnlctrlsum>5 0400\</orgnlctrlsum> \<pmtinfsts>rjct\</pmtinfsts> \<txinfandsts> \<orgnlinstrid>example01234567\</orgnlinstrid> \<orgnlendtoendid>sanity 10 1 12 1 21\</orgnlendtoendid> \<txsts>rjct\</txsts> \<stsrsninf> \<rsn> \<cd>narr\</cd> \</rsn> \<addtlinf>\<!\[cdata\[instruction id example01234567 already exist]]>\</addtlinf> \</stsrsninf> \</txinfandsts> \<txinfandsts> \<orgnlinstrid>example01234567\</orgnlinstrid> \<orgnlendtoendid>example01234567\</orgnlendtoendid> \<txsts>rjct\</txsts> \<stsrsninf> \<rsn> \<cd>narr\</cd> \</rsn> \<addtlinf>\<!\[cdata\[instruction id example01234567 already exist]]>\</addtlinf> \</stsrsninf> \</txinfandsts> \<txinfandsts> \<orgnlinstrid>example012345678\</orgnlinstrid> \<orgnlendtoendid>example012345678\</orgnlendtoendid> \<txsts>rjct\</txsts> \<stsrsninf> \<rsn> \<cd>narr\</cd> \</rsn> \<addtlinf>\<!\[cdata\[instruction id example012345678 already exist]]>\</addtlinf> \</stsrsninf> \</txinfandsts> \</orgnlpmtinfandsts> \</cstmrpmtstsrpt> \</document>