Skip to main content

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

To utilize the update fully, the following Asset classes and types should be installed from Appstore.

  • 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

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]"
;