Implemented transferring money with pain.001.003.03 (outdated but the only version supported by most German banks)

This commit is contained in:
dankito 2020-04-29 18:41:46 +02:00
parent 841b23c970
commit 31cc427fd2
4 changed files with 37 additions and 4 deletions

View File

@ -239,6 +239,10 @@ open class MessageBuilder(protected val generator: ISegmentNumberGenerator = Seg
return Pair(result, urn)
}
getSepaUrnFor(CustomerSegmentId.SepaAccountInfoParameters, account, "pain.001.003.03")?.let { urn ->
return Pair(result, urn)
}
return Pair(MessageBuilderResult(true, false, result.allowedVersions, result.supportedVersions, null), null) // TODO: how to tell that we don't support required SEPA pain version?
}

View File

@ -20,7 +20,7 @@ open class SepaEinzelueberweisung(
CustomerSegmentId.SepaBankTransfer,
1,
sepaDescriptorUrn,
"pain.001.001.03.xml",
if (sepaDescriptorUrn.contains("pain.001.003.03", true)) "pain.001.003.03.xml" else "pain.001.001.03.xml",
account.iban ?: "", // TODO: what to do if iban is not set?
debitorBic,
mapOf(

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03 pain.001.003.03.xsd"><CstmrCdtTrfInitn><GrpHdr><MsgId>$MessageId$</MsgId><CreDtTm>$CreationDateTime$</CreDtTm><NbOfTxs>$NumberOfTransactions$</NbOfTxs><InitgPty><Nm>$DebitorName$</Nm></InitgPty></GrpHdr><PmtInf><PmtInfId>$PaymentInformationId$</PmtInfId><PmtMtd>TRF</PmtMtd><BtchBookg>true</BtchBookg><NbOfTxs>$NumberOfTransactions$</NbOfTxs><CtrlSum>$Amount$</CtrlSum><PmtTpInf><SvcLvl><Cd>SEPA</Cd></SvcLvl></PmtTpInf><ReqdExctnDt>$RequestedExecutionDate$</ReqdExctnDt><Dbtr><Nm>$DebitorName$</Nm></Dbtr><DbtrAcct><Id><IBAN>$DebitorIban$</IBAN></Id></DbtrAcct><DbtrAgt><FinInstnId><BIC>$DebitorBic$</BIC></FinInstnId></DbtrAgt><ChrgBr>SLEV</ChrgBr><CdtTrfTxInf><PmtId><EndToEndId>NOTPROVIDED</EndToEndId></PmtId><Amt><InstdAmt Ccy="EUR">$Amount$</InstdAmt></Amt><CdtrAgt><FinInstnId><BIC>$CreditorBic$</BIC></FinInstnId></CdtrAgt><Cdtr><Nm>$CreditorName$</Nm></Cdtr><CdtrAcct><Id><IBAN>$CreditorIban$</IBAN></Id></CdtrAcct><RmtInf><Ustrd>$Usage$</Ustrd></RmtInf></CdtTrfTxInf></PmtInf></CstmrCdtTrfInitn></Document>

View File

@ -9,10 +9,8 @@ import org.junit.Test
class SepaEinzelueberweisungTest {
@Test
fun format() {
companion object {
// given
val segmentNumber = 7
val debitorName = "Nelson Mandela"
val debitorIban = "ZA123456780987654321"
@ -23,6 +21,13 @@ class SepaEinzelueberweisungTest {
val amount = 1234.56.toBigDecimal()
val usage = "What should Mahatma Gandhi want with money?"
}
@Test
fun format_Pain001_001_03() {
// given
val underTest = SepaEinzelueberweisung(segmentNumber,
"urn:iso:std:iso:20022:tech:xsd:pain.001.001.03",
CustomerData("", "", "", debitorName),
@ -40,4 +45,27 @@ class SepaEinzelueberweisungTest {
assertThat(result).contains(debitorName, debitorIban, debitorBic, creditorName, creditorIban, creditorBic,
amount.toString(), usage, "urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.001.03")
}
@Test
fun format_Pain001_003_03() {
// given
val underTest = SepaEinzelueberweisung(segmentNumber,
"urn:iso:std:iso:20022:tech:xsd:pain.001.003.03",
CustomerData("", "", "", debitorName),
AccountData("", null, 0, "", debitorIban, "", null, null, "", null, null, listOf()),
debitorBic,
BankTransferData(creditorName, creditorIban, creditorBic, amount, usage)
)
// when
val result = underTest.format()
// then
assertThat(result).contains(debitorName, debitorIban, debitorBic, creditorName, creditorIban, creditorBic,
amount.toString(), usage, "urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.003.03")
}
}