Skip to content

Commit

Permalink
add: Valid wallet addresses as bank accounts (Acct.Othr) are recogniz…
Browse files Browse the repository at this point in the history
…ed for direct use while reading pain.001
  • Loading branch information
rsteimen committed Nov 28, 2022
1 parent ed81632 commit e71f7b9
Show file tree
Hide file tree
Showing 5 changed files with 155 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.radynamics.CryptoIso20022Interop.iso20022.pain001;

import com.radynamics.CryptoIso20022Interop.cryptoledger.Ledger;
import com.radynamics.CryptoIso20022Interop.cryptoledger.Wallet;
import com.radynamics.CryptoIso20022Interop.exchange.Currency;
import com.radynamics.CryptoIso20022Interop.exchange.Money;
import com.radynamics.CryptoIso20022Interop.iso20022.*;
Expand Down Expand Up @@ -52,8 +53,10 @@ public Payment[] read(InputStream pain001) throws Exception {

var t = new Payment(ledger.createTransaction());
t.setSenderAccount(senderAccount);
t.setSenderWallet(toValidWalletOrNull(senderAccount));
t.setSenderAddress(senderAddress);
t.setReceiverAccount(receiverAccount);
t.setReceiverWallet(toValidWalletOrNull(receiverAccount));
t.setReceiverAddress(getAddress(cdtTrfTxInf.getCdtr()));
if (sourceAmt == null || sourceCcy == null) {
t.setAmountUnknown();
Expand Down Expand Up @@ -94,6 +97,13 @@ public Payment[] read(InputStream pain001) throws Exception {
return list.toArray(new Payment[0]);
}

private Wallet toValidWalletOrNull(Account account) {
if (account == null || !ledger.isValidPublicKey(account.getUnformatted())) {
return null;
}
return ledger.createWallet(account.getUnformatted(), null);
}

private Address getAddress(PartyIdentification32 obj) {
if (obj == null) {
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ static void assertEquals(Payment t, String senderWallet, String receiverAccount,
}
}

static void assertEqualsWallet(Payment t, String sender, String receiver) {
public static void assertEqualsWallet(Payment t, String sender, String receiver) {
if (sender == null) {
assertNull(t.getSenderWallet());
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -268,4 +268,24 @@ public void pain001ExamplePTXV2() throws Exception {
setCountryShort("GB");
}});
}

@Test
public void pain001AcctWalletAddress() throws Exception {
var ledger = new TestLedger();
var ti = new TransformInstruction(ledger, Config.fallback(ledger), new MemoryAccountMappingSource(ledger));
ti.setTargetCcy(ledger.getNativeCcySymbol());

ExchangeRate[] rates = {
new ExchangeRate("USD", ledger.getNativeCcySymbol(), 1, ZonedDateTime.now()),
};
var r = new Pain001Reader(ledger);
var tt = new TransactionTranslator(ti, new CurrencyConverter(rates));
var transactions = tt.apply(r.read(getClass().getClassLoader().getResourceAsStream("pain001/pain00100109/ch03/pain_001_Example_AcctWalletAddress.xml")));

Assertions.assertNotNull(transactions);
Assertions.assertEquals(1, transactions.length);

var t = transactions[0];
Assertion.assertEqualsWallet(t, "rwYb1M4hZcSG6tcAuhvgEwSpsiACKv6BG8", "rNZtEviqTua4FcJebLkhq9hS7fkuxaodya");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import org.apache.commons.lang3.NotImplementedException;
import org.apache.commons.lang3.StringUtils;

import java.util.HashSet;

public class TestLedger implements Ledger {
private final static int FACTOR = 1000;
private WalletInfoProvider[] walletInfoProvider = new WalletInfoProvider[0];
Expand Down Expand Up @@ -149,7 +151,12 @@ public void setInfoProvider(WalletInfoProvider[] walletInfoProvider) {

@Override
public boolean isValidPublicKey(String publicKey) {
return true;
var map = new HashSet<String>();
map.add("aaa");
map.add("bbb");
map.add("rwYb1M4hZcSG6tcAuhvgEwSpsiACKv6BG8");
map.add("rNZtEviqTua4FcJebLkhq9hS7fkuxaodya");
return map.contains(publicKey);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09 pain.001.001.09.ch.03.xsd">
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>MSG-06-V2</MsgId>
<CreDtTm>2023-02-15T07:30:00</CreDtTm>
<NbOfTxs>1</NbOfTxs>
<CtrlSum>3421.00</CtrlSum>
<InitgPty>
<Nm>MUSTER AG</Nm>
<CtctDtls>
<Othr>
<ChanlTp>NAME</ChanlTp>
<Id>pay.4me</Id>
</Othr>
<Othr>
<ChanlTp>VRSN</ChanlTp>
<Id>2.8.1</Id>
</Othr>
<Othr>
<ChanlTp>PRVD</ChanlTp>
<Id>SuperPay AG</Id>
</Othr>
<Othr>
<ChanlTp>SPSV</ChanlTp>
<Id>2.0</Id>
</Othr>
</CtctDtls>
</InitgPty>
</GrpHdr>
<PmtInf>
<PmtInfId>PMTINF-01</PmtInfId>
<PmtMtd>TRF</PmtMtd>
<BtchBookg>true</BtchBookg>
<ReqdExctnDt>
<Dt>2023-02-18</Dt>
</ReqdExctnDt>
<Dbtr>
<Nm>MUSTER AG</Nm>
<PstlAdr>
<TwnNm>SELDWYLA</TwnNm>
<Ctry>CH</Ctry>
</PstlAdr>
</Dbtr>
<DbtrAcct>
<Id>
<Othr>
<Id>rwYb1M4hZcSG6tcAuhvgEwSpsiACKv6BG8</Id>
</Othr>
</Id>
</DbtrAcct>
<DbtrAgt>
<FinInstnId>
<BICFI>RAIFCH22</BICFI>
</FinInstnId>
</DbtrAgt>
<CdtTrfTxInf>
<PmtId>
<InstrId>INSTRID-01-01</InstrId>
<EndToEndId>ENDTOENDID-001</EndToEndId>
<UETR>a933b87d-7f97-4be7-95e4-d8d11dd9db3f</UETR>
</PmtId>
<Amt>
<InstdAmt Ccy="USD">3421.00</InstdAmt>
</Amt>
<CdtrAgt>
<FinInstnId>
<ClrSysMmbId>
<ClrSysId>
<Cd>CHP</Cd>
</ClrSysId>
<MmbId>BR004507</MmbId>
</ClrSysMmbId>
<Nm>UBS Ltd</Nm>
<PstlAdr>
<StrtNm>Finsbury Avenue</StrtNm>
<BldgNb>1</BldgNb>
<PstCd>EC2M 2PP</PstCd>
<TwnNm>London</TwnNm>
<Ctry>GB</Ctry>
</PstlAdr>
</FinInstnId>
</CdtrAgt>
<Cdtr>
<Nm>Peter Fonda</Nm>
<PstlAdr>
<StrtNm>Saville Row</StrtNm>
<BldgNb>4</BldgNb>
<PstCd>EC2R WYK</PstCd>
<TwnNm>London</TwnNm>
<Ctry>GB</Ctry>
</PstlAdr>
</Cdtr>
<CdtrAcct>
<Id>
<Othr>
<Id>rNZtEviqTua4FcJebLkhq9hS7fkuxaodya</Id>
</Othr>
</Id>
</CdtrAcct>
<RmtInf>
<Strd>
<CdtrRefInf>
<Tp>
<CdOrPrtry>
<Cd>SCOR</Cd>
</CdOrPrtry>
</Tp>
<Ref>RF712348231</Ref>
</CdtrRefInf>
</Strd>
</RmtInf>
</CdtTrfTxInf>
</PmtInf>
</CstmrCdtTrfInitn>
</Document>

0 comments on commit e71f7b9

Please sign in to comment.