Skip to content

Commit e71f7b9

Browse files
committed
add: Valid wallet addresses as bank accounts (Acct.Othr) are recognized for direct use while reading pain.001
1 parent ed81632 commit e71f7b9

File tree

5 files changed

+155
-2
lines changed

5 files changed

+155
-2
lines changed

src/main/java/com/radynamics/CryptoIso20022Interop/iso20022/pain001/Pain001Reader.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.radynamics.CryptoIso20022Interop.iso20022.pain001;
22

33
import com.radynamics.CryptoIso20022Interop.cryptoledger.Ledger;
4+
import com.radynamics.CryptoIso20022Interop.cryptoledger.Wallet;
45
import com.radynamics.CryptoIso20022Interop.exchange.Currency;
56
import com.radynamics.CryptoIso20022Interop.exchange.Money;
67
import com.radynamics.CryptoIso20022Interop.iso20022.*;
@@ -52,8 +53,10 @@ public Payment[] read(InputStream pain001) throws Exception {
5253

5354
var t = new Payment(ledger.createTransaction());
5455
t.setSenderAccount(senderAccount);
56+
t.setSenderWallet(toValidWalletOrNull(senderAccount));
5557
t.setSenderAddress(senderAddress);
5658
t.setReceiverAccount(receiverAccount);
59+
t.setReceiverWallet(toValidWalletOrNull(receiverAccount));
5760
t.setReceiverAddress(getAddress(cdtTrfTxInf.getCdtr()));
5861
if (sourceAmt == null || sourceCcy == null) {
5962
t.setAmountUnknown();
@@ -94,6 +97,13 @@ public Payment[] read(InputStream pain001) throws Exception {
9497
return list.toArray(new Payment[0]);
9598
}
9699

100+
private Wallet toValidWalletOrNull(Account account) {
101+
if (account == null || !ledger.isValidPublicKey(account.getUnformatted())) {
102+
return null;
103+
}
104+
return ledger.createWallet(account.getUnformatted(), null);
105+
}
106+
97107
private Address getAddress(PartyIdentification32 obj) {
98108
if (obj == null) {
99109
return null;

src/test/java/com/radynamics/CryptoIso20022Interop/iso20022/pain001/Assertion.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ static void assertEquals(Payment t, String senderWallet, String receiverAccount,
4949
}
5050
}
5151

52-
static void assertEqualsWallet(Payment t, String sender, String receiver) {
52+
public static void assertEqualsWallet(Payment t, String sender, String receiver) {
5353
if (sender == null) {
5454
assertNull(t.getSenderWallet());
5555
} else {

src/test/java/com/radynamics/CryptoIso20022Interop/iso20022/pain001/Pain00100109ch03Test.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,4 +268,24 @@ public void pain001ExamplePTXV2() throws Exception {
268268
setCountryShort("GB");
269269
}});
270270
}
271+
272+
@Test
273+
public void pain001AcctWalletAddress() throws Exception {
274+
var ledger = new TestLedger();
275+
var ti = new TransformInstruction(ledger, Config.fallback(ledger), new MemoryAccountMappingSource(ledger));
276+
ti.setTargetCcy(ledger.getNativeCcySymbol());
277+
278+
ExchangeRate[] rates = {
279+
new ExchangeRate("USD", ledger.getNativeCcySymbol(), 1, ZonedDateTime.now()),
280+
};
281+
var r = new Pain001Reader(ledger);
282+
var tt = new TransactionTranslator(ti, new CurrencyConverter(rates));
283+
var transactions = tt.apply(r.read(getClass().getClassLoader().getResourceAsStream("pain001/pain00100109/ch03/pain_001_Example_AcctWalletAddress.xml")));
284+
285+
Assertions.assertNotNull(transactions);
286+
Assertions.assertEquals(1, transactions.length);
287+
288+
var t = transactions[0];
289+
Assertion.assertEqualsWallet(t, "rwYb1M4hZcSG6tcAuhvgEwSpsiACKv6BG8", "rNZtEviqTua4FcJebLkhq9hS7fkuxaodya");
290+
}
271291
}

src/test/java/com/radynamics/CryptoIso20022Interop/iso20022/pain001/TestLedger.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import org.apache.commons.lang3.NotImplementedException;
1111
import org.apache.commons.lang3.StringUtils;
1212

13+
import java.util.HashSet;
14+
1315
public class TestLedger implements Ledger {
1416
private final static int FACTOR = 1000;
1517
private WalletInfoProvider[] walletInfoProvider = new WalletInfoProvider[0];
@@ -149,7 +151,12 @@ public void setInfoProvider(WalletInfoProvider[] walletInfoProvider) {
149151

150152
@Override
151153
public boolean isValidPublicKey(String publicKey) {
152-
return true;
154+
var map = new HashSet<String>();
155+
map.add("aaa");
156+
map.add("bbb");
157+
map.add("rwYb1M4hZcSG6tcAuhvgEwSpsiACKv6BG8");
158+
map.add("rNZtEviqTua4FcJebLkhq9hS7fkuxaodya");
159+
return map.contains(publicKey);
153160
}
154161

155162
@Override
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<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">
3+
<CstmrCdtTrfInitn>
4+
<GrpHdr>
5+
<MsgId>MSG-06-V2</MsgId>
6+
<CreDtTm>2023-02-15T07:30:00</CreDtTm>
7+
<NbOfTxs>1</NbOfTxs>
8+
<CtrlSum>3421.00</CtrlSum>
9+
<InitgPty>
10+
<Nm>MUSTER AG</Nm>
11+
<CtctDtls>
12+
<Othr>
13+
<ChanlTp>NAME</ChanlTp>
14+
<Id>pay.4me</Id>
15+
</Othr>
16+
<Othr>
17+
<ChanlTp>VRSN</ChanlTp>
18+
<Id>2.8.1</Id>
19+
</Othr>
20+
<Othr>
21+
<ChanlTp>PRVD</ChanlTp>
22+
<Id>SuperPay AG</Id>
23+
</Othr>
24+
<Othr>
25+
<ChanlTp>SPSV</ChanlTp>
26+
<Id>2.0</Id>
27+
</Othr>
28+
</CtctDtls>
29+
</InitgPty>
30+
</GrpHdr>
31+
<PmtInf>
32+
<PmtInfId>PMTINF-01</PmtInfId>
33+
<PmtMtd>TRF</PmtMtd>
34+
<BtchBookg>true</BtchBookg>
35+
<ReqdExctnDt>
36+
<Dt>2023-02-18</Dt>
37+
</ReqdExctnDt>
38+
<Dbtr>
39+
<Nm>MUSTER AG</Nm>
40+
<PstlAdr>
41+
<TwnNm>SELDWYLA</TwnNm>
42+
<Ctry>CH</Ctry>
43+
</PstlAdr>
44+
</Dbtr>
45+
<DbtrAcct>
46+
<Id>
47+
<Othr>
48+
<Id>rwYb1M4hZcSG6tcAuhvgEwSpsiACKv6BG8</Id>
49+
</Othr>
50+
</Id>
51+
</DbtrAcct>
52+
<DbtrAgt>
53+
<FinInstnId>
54+
<BICFI>RAIFCH22</BICFI>
55+
</FinInstnId>
56+
</DbtrAgt>
57+
<CdtTrfTxInf>
58+
<PmtId>
59+
<InstrId>INSTRID-01-01</InstrId>
60+
<EndToEndId>ENDTOENDID-001</EndToEndId>
61+
<UETR>a933b87d-7f97-4be7-95e4-d8d11dd9db3f</UETR>
62+
</PmtId>
63+
<Amt>
64+
<InstdAmt Ccy="USD">3421.00</InstdAmt>
65+
</Amt>
66+
<CdtrAgt>
67+
<FinInstnId>
68+
<ClrSysMmbId>
69+
<ClrSysId>
70+
<Cd>CHP</Cd>
71+
</ClrSysId>
72+
<MmbId>BR004507</MmbId>
73+
</ClrSysMmbId>
74+
<Nm>UBS Ltd</Nm>
75+
<PstlAdr>
76+
<StrtNm>Finsbury Avenue</StrtNm>
77+
<BldgNb>1</BldgNb>
78+
<PstCd>EC2M 2PP</PstCd>
79+
<TwnNm>London</TwnNm>
80+
<Ctry>GB</Ctry>
81+
</PstlAdr>
82+
</FinInstnId>
83+
</CdtrAgt>
84+
<Cdtr>
85+
<Nm>Peter Fonda</Nm>
86+
<PstlAdr>
87+
<StrtNm>Saville Row</StrtNm>
88+
<BldgNb>4</BldgNb>
89+
<PstCd>EC2R WYK</PstCd>
90+
<TwnNm>London</TwnNm>
91+
<Ctry>GB</Ctry>
92+
</PstlAdr>
93+
</Cdtr>
94+
<CdtrAcct>
95+
<Id>
96+
<Othr>
97+
<Id>rNZtEviqTua4FcJebLkhq9hS7fkuxaodya</Id>
98+
</Othr>
99+
</Id>
100+
</CdtrAcct>
101+
<RmtInf>
102+
<Strd>
103+
<CdtrRefInf>
104+
<Tp>
105+
<CdOrPrtry>
106+
<Cd>SCOR</Cd>
107+
</CdOrPrtry>
108+
</Tp>
109+
<Ref>RF712348231</Ref>
110+
</CdtrRefInf>
111+
</Strd>
112+
</RmtInf>
113+
</CdtTrfTxInf>
114+
</PmtInf>
115+
</CstmrCdtTrfInitn>
116+
</Document>

0 commit comments

Comments
 (0)