Stamdata debt instruments updates
This mapping is used for Security Type Debt instruments (BOND).
This mapping is used in the Securities view when you click Update Security Data and choose Stamdata bond.
Configuration
Asset classes and types are set up in Preference → Securities → Asset classes and types (see Asset classes and types in FA Back reference). To fully utilize the updates functionality, you need the following asset classes and types:
Geographical allocation (M49)
ISO10962 Classification of Financial Instruments
Currency exposure
Note that Duration, Modified Duration and YTM data is only populated if Price feed from Nordic Bond Pricing, that Stamdata distributes, is configured (i.e. if a Price user is defined in Tools - Administer - Market Data Connectors).
Mapping
Mapping name: update.stamdata.D
Updated fields
Security code
ISIN code
Name
Country
Currency
Call Date
Outstanding shares
Maturity Date
Maturity Price
Coupon (Fixed rate bonds)
Fixings (Floating rate bonds)
Key figures:
Credit Rating (Moody’s)
Credit Rating (Fitch)
Credit Rating (Standard & Poor's)
Duration
Modified Duration
YTM
Allocations:
Geographical allocation (M49)
Currency exposure
ISO10962 Classification of Financial Instruments
Profile values
Covered (Solvency II)
Mapping tables
Row | Source field | FA field | Script |
---|---|---|---|
1 | ShortName | s.name |
|
2 | ISIN | s.isinCode |
|
3 | Currency | s.currency |
|
4 |
| s.securityCode | output="[ISIN]"+"_"+"[Currency]"; |
5 | Issuer_CountryCode | s.country |
|
6 | MaturityDate | s.maturityDate |
|
7 | MaturityPrice | s.maturityPrice |
|
8 | CurrentInterestType | INTTYPE |
|
9 | table_IssueTermDate | COUPONLIST |
|
10 |
| s.coupons | if("[CurrentInterestType]"=="Fixed") { output="[CurrentCouponRate]" } else { output="" } ; |
11 | CurrentCouponRate | s.coupon | if("[CurrentInterestType]"=="Fixed") { output="[CurrentCouponRate]" } else { output="" } ; |
12 | priceData | pricevector |
|
13 |
| s.macaulayDuration | def pd=FAFormat?.get("pricevector"); if(pd&&pd.get("Duration")&&pd.get("PriceDate")) {output=pd.get("PriceDate")+"="+pd.get("Duration");} else {output=""} ; |
14 |
| s.modifiedDuration | def pd=FAFormat?.get("pricevector"); if(pd&&pd.get("ModifiedDuration")&&pd.get("PriceDate")) {output=pd.get("PriceDate")+"="+pd.get("ModifiedDuration");} else {output=""} ; |
15 |
| s.ytm | def pd=FAFormat?.get('pricevector'); if(pd&&pd.get('Yield')&&pd.get('PriceDate')) {output=pd.get('PriceDate')+"="+Double.parseDouble(pd.get('Yield'))*100;} else {output=''} ; |
16 | CurrentMargin | s.spread |
|
17 | CurrentOutstandingAmount | s.share |
|
18 | table_IssueRating | IssueRating |
|
19 |
| moody | def moodyRatingChar=FAFormat.get("IssueRating")?.find{it.IssueRating.RatingCompany == "Moody"}?.IssueRating?.Rating; def moodyDate=FAFormat.get("IssueRating")?.find{it.IssueRating.RatingCompany == "Moody"}?.IssueRating?.RatingDate; if((moodyRatingChar==null)||(moodyRatingChar=='N.A.')||(moodyRatingChar=='N.S.')||(moodyRatingChar=='NR')||(moodyRatingChar=='WR')||(moodyRatingChar=='Unsolicited')||(moodyRatingChar=='e, p')) {output = ""} else {output="MCR="+moodyDate+"="+moodyRatingChar} ; |
20 |
| sp | def spRatingChar=FAFormat.get("IssueRating")?.find{it.IssueRating.RatingCompany == "S&P"}?.IssueRating?.Rating; def spDate=FAFormat.get("IssueRating")?.find{it.IssueRating.RatingCompany == "S&P"}?.IssueRating?.RatingDate; if((spRatingChar==null)||(spRatingChar=='N.A.')||(spRatingChar=='N.S.')||(spRatingChar=='NR')||(spRatingChar=='WR')||(spRatingChar=='Unsolicited')||(spRatingChar=='Pr')) {output = ""} else {output="SPCR="+spDate+"="+spRatingChar} ; |
21 |
| fitch | def fitchRatingChar=FAFormat.get("IssueRating")?.find{it.IssueRating.RatingCompany == "Fitch"}?.IssueRating?.Rating; def fitchDate=FAFormat.get("IssueRating")?.find{it.IssueRating.RatingCompany == "Fitch"}?.IssueRating?.RatingDate; if((fitchRatingChar==null)||(fitchRatingChar=='N.A.')||(fitchRatingChar=='N.S.')||(fitchRatingChar=='NR')||(fitchRatingChar=='WD')||(fitchRatingChar=='Expected')||(fitchRatingChar=='RD')) {output=''} else {output="FCR="+fitchDate+"="+fitchRatingChar} ; |
22 |
| RATING | if(("[moody]"!='')&&("[sp]"!='')&&("[fitch]"!='')) {output="[moody]"+":"+"[sp]"+":"+"[fitch]"} else {if(("[moody]"!='')&&("[sp]"!='')&&("[fitch]"=='')) {output="[moody]"+":"+"[sp]"} else {if(("[moody]"!='')&&("[sp]"=='')&&("[fitch]"!='')) {output="[moody]"+":"+"[fitch]"} else {if(("[moody]"=='')&&("[sp]"!='')&&("[fitch]"!='')) {output="[sp]"+":"+"[fitch]"} else {if("[moody]"!='') {output="[moody]"} else {if("[sp]"!='') {output="[sp]"} else {if("[fitch]"!='') {output="[fitch]"} else {output=''} } } } } } } ; |
23 | EarlyRedeemedDate | s.callDate | if(("[EarlyRedeemedDate]"!='')&&("[EarlyRedeemedDate]"!='null')&&("[EarlyRedeemedDate]"!='N.A.')) {output="[EarlyRedeemedDate]"} else {output=""} ; |
24 |
| s.keyFigures | if(("[RATING]"!="")) { output="***:"+"[RATING]" } else { output="" } ; |
25 |
| CURR | output = "" if((!"[s.currency]"?.trim())||("[s.currency]"=='N.A.')) { output = "" } else { def s = services.securityService.loadSecurityBySecurityCode("[s.securityCode]") def allocationsChanged = true def allocationDate = "2009-01-01" // Any new allocations are set on the specified date if(s){ def allocs = s.getAllocationsOnDate(new Date(), "CURR") if(allocs && allocs.size() == 1 && allocs.get(0).sector.code == "[s.currency]"){ allocationsChanged = false } else if(allocs && allocs.size() == 1 && allocs.get(0).sector.code != "[s.currency]"){ // There is an existing allocation that has changed -> the new allocation will be set for this date allocationDate = new Date().format("yyyy-MM-dd") } } if(services.configurationService.findGroupByCode('CURR') && allocationsChanged){ output += ",CURR:"+ allocationDate +":"+"[s.currency]"+"=100" } } ; |
26 |
| CTRY | switch("[s.country]") { case "AW": output="533" break case "AF": output="004" break case "AO": output="024" break case "AI": output="660" break case "AX": output="248" break case "AL": output="008" break case "AD": output="020" break case "AN": output="530" break case "AE": output="784" break case "AR": output="032" break case "AM": output="051" break case "AS": output="016" break case "AQ": output="010" break case "TF": output="260" break case "AG": output="028" break case "AU": output="036" break case "AT": output="040" break case "AZ": output="031" break case "BI": output="108" break case "BE": output="056" break case "BJ": output="204" break case "BQ": output="535" break case "BF": output="854" break case "BD": output="050" break case "BG": output="100" break case "BH": output="048" break case "BS": output="044" break case "BA": output="070" break case "BY": output="112" break case "BZ": output="084" break case "BM": output="060" break case "BO": output="068" break case "BR": output="076" break case "BB": output="052" break case "BN": output="096" break case "BT": output="064" break case "BV": output="074" break case "BW": output="072" break case "CF": output="140" break case "CA": output="124" break case "CC": output="166" break case "CH": output="756" break case "CL": output="152" break case "CN": output="156" break case "CI": output="384" break case "CM": output="120" break case "CD": output="180" break case "CG": output="178" break case "CK": output="184" break case "CO": output="170" break case "KM": output="174" break case "CV": output="132" break case "CR": output="188" break case "CU": output="192" break case "CW": output="531" break case "CX": output="162" break case "KY": output="136" break case "CY": output="196" break case "CZ": output="203" break case "DE": output="276" break case "DJ": output="262" break case "DM": output="212" break case "DK": output="208" break case "DO": output="214" break case "DZ": output="012" break case "EC": output="218" break case "EG": output="818" break case "ER": output="232" break case "EH": output="732" break case "ES": output="724" break case "EE": output="233" break case "ET": output="231" break case "FI": output="246" break case "FJ": output="242" break case "FK": output="238" break case "FR": output="250" break case "FO": output="234" break case "FM": output="583" break case "FX": output="249" break case "GA": output="266" break case "GB": output="826" break case "GE": output="268" break case "GG": output="831" break case "GH": output="288" break case "GI": output="292" break case "GN": output="324" break case "GP": output="312" break case "GM": output="270" break case "GW": output="624" break case "GQ": output="226" break case "GR": output="300" break case "GD": output="308" break case "GL": output="304" break case "GT": output="320" break case "GF": output="254" break case "GU": output="316" break case "GY": output="328" break case "HK": output="344" break case "HM": output="334" break case "HN": output="340" break case "HR": output="191" break case "HT": output="332" break case "HU": output="348" break case "ID": output="360" break case "IM": output="833" break case "IN": output="356" break case "IM": output="833" break case "IO": output="086" break case "IE": output="372" break case "IR": output="364" break case "IQ": output="368" break case "IS": output="352" break case "IL": output="376" break case "IT": output="380" break case "JM": output="388" break case "JE": output="832" break case "JO": output="400" break case "JP": output="392" break case "KZ": output="398" break case "KE": output="404" break case "KG": output="417" break case "KH": output="116" break case "KI": output="296" break case "KN": output="659" break case "KR": output="410" break case "KW": output="414" break case "LA": output="418" break case "LB": output="422" break case "LR": output="430" break case "LY": output="434" break case "LC": output="662" break case "LI": output="438" break case "LK": output="144" break case "LS": output="426" break case "LT": output="440" break case "LU": output="442" break case "LV": output="428" break case "MO": output="446" break case "MA": output="504" break case "MC": output="492" break case "MD": output="498" break case "MG": output="450" break case "MV": output="462" break case "MX": output="484" break case "MH": output="584" break case "MK": output="807" break case "ML": output="466" break case "MT": output="470" break case "MM": output="104" break case "ME": output="499" break case "MN": output="496" break case "MP": output="580" break case "MZ": output="508" break case "MR": output="478" break case "MS": output="500" break case "MQ": output="474" break case "MU": output="480" break case "MW": output="454" break case "MY": output="458" break case "YT": output="175" break case "NA": output="516" break case "NC": output="540" break case "NE": output="562" break case "NF": output="574" break case "NG": output="566" break case "NI": output="558" break case "NU": output="570" break case "NL": output="528" break case "NO": output="578" break case "NP": output="524" break case "NR": output="520" break case "NZ": output="554" break case "OM": output="512" break case "PK": output="586" break case "PA": output="591" break case "PN": output="612" break case "PE": output="604" break case "PH": output="608" break case "PW": output="585" break case "PG": output="598" break case "PL": output="616" break case "PR": output="630" break case "KP": output="408" break case "PT": output="620" break case "PY": output="600" break case "PS": output="275" break case "PF": output="258" break case "QA": output="634" break case "RE": output="638" break case "RO": output="642" break case "RO": output="642" break case "RU": output="643" break case "RW": output="646" break case "SA": output="682" break case "CS": output="891" break case "SD": output="736" break case "SN": output="686" break case "SG": output="702" break case "GS": output="239" break case "SH": output="654" break case "SJ": output="744" break case "SB": output="090" break case "SL": output="694" break case "SV": output="222" break case "SM": output="674" break case "SO": output="706" break case "PM": output="666" break case "RS": output="688" break case "SS": output="728" break case "ST": output="678" break case "SR": output="740" break case "SK": output="703" break case "SI": output="705" break case "SE": output="752" break case "SZ": output="748" break case "SX": output="534" break case "SC": output="690" break case "SY": output="760" break case "TC": output="796" break case "TD": output="148" break case "TG": output="768" break case "TH": output="764" break case "TJ": output="762" break case "TK": output="772" break case "TM": output="795" break case "TL": output="626" break case "TP": output="626" break case "TO": output="776" break case "TT": output="780" break case "TN": output="788" break case "TR": output="792" break case "TV": output="798" break case "TW": output="158" break case "TZ": output="834" break case "UG": output="800" break case "UA": output="804" break case "UM": output="581" break case "UY": output="858" break case "US": output="840" break case "UZ": output="860" break case "VA": output="336" break case "VC": output="670" break case "VE": output="862" break case "VG": output="092" break case "VI": output="850" break case "VN": output="704" break case "VU": output="548" break case "WF": output="876" break case "WS": output="882" break case "YE": output="887" break case "YU": output="891" break case "ZA": output="710" break case "ZM": output="894" break case "ZR": output="180" break case "ZW": output="716" break default: output='' } ;"}, |
27 |
| M49 | output = "" if((!"[Issuer_CountryCode]"?.trim())||("[Issuer_CountryCode]"=='N.A.')) { output = "" } else { def s = services.securityService.loadSecurityBySecurityCode("[s.securityCode]") def allocationsChanged = true def allocationDate = "2009-01-01" // Any new allocations are set on the specified date if(s){ def allocs = s.getAllocationsOnDate(new Date(), "M49") if(allocs && allocs.size() == 1 && allocs.get(0).sector.code == "[CTRY]"){ allocationsChanged = false } else if(allocs && allocs.size() == 1 && allocs.get(0).sector.code != "[CTRY]"){ // There is an existing allocation that has changed -> the new allocation will be set for this date allocationDate = new Date().format("yyyy-MM-dd") } } if(services.configurationService.findGroupByCode('M49') && allocationsChanged){ output += ",M49:"+ allocationDate +":"+"[CTRY]"+"=100" } } ; |
28 | CFICode | CFI |
|
29 |
| ISO10962 | output = "" if((!"[CFICode]"?.trim())||("[CFICode]"=='N.A.')||("[CFICode]"=='')) { output = "" } else { def s = services.securityService.loadSecurityBySecurityCode("[s.securityCode]") def allocationsChanged = true def allocationDate = "2009-01-01" // Any new allocations are set on the specified date if(s){ def allocs = s.getAllocationsOnDate(new Date(), "ISO10962") if(allocs && allocs.size() == 1 && allocs.get(0).sector.code == "[CFI]".substring(0,2)){ allocationsChanged = false } else if(allocs && allocs.size() == 1 && allocs.get(0).sector.code != "[CFI]".substring(0,2)){ // There is an existing allocation that has changed -> the new allocation will be set for this date allocationDate = new Date().format("yyyy-MM-dd") } } if(services.configurationService.findGroupByCode('ISO10962') && allocationsChanged){ output += ",ISO10962:"+ allocationDate +":"+"[CFI]".substring(0,2)+"=100" } } ; |
30 |
| s.allocations | output="***[CURR][M49][ISO10962]" ; |
31 | RiskSpecification_20120319 | s.profileAttributes | if(("[RiskSpecification_20120319]"=="4")){ output="security.sii.coveredBond=true:String"}else{ output="security.sii.coveredBond=false:String"}; |