@@ -297,48 +297,6 @@ void TRS::build(const boost::shared_ptr<EngineFactory>& engineFactory) {
297297
298298 reset ();
299299
300- // ISDA taxonomy
301- bool assetClassIsUnique = true ;
302- std::string assetClass;
303- for (auto u : underlying_) {
304- auto it = u->additionalData ().find (" isdaAssetClass" );
305- if (it != u->additionalData ().end ()) {
306- std::string ac = boost::any_cast<std::string>(it->second );
307- if (assetClass == " " )
308- assetClass = ac;
309- else if (ac != assetClass)
310- assetClassIsUnique = false ;
311- }
312- }
313-
314- additionalData_[" isdaAssetClass" ] = string (" " );
315- additionalData_[" isdaBaseProduct" ] = string (" " );
316- additionalData_[" isdaSubProduct" ] = string (" " );
317- additionalData_[" isdaTransaction" ] = string (" " );
318-
319- if (assetClass == " " ) {
320- ALOG (" ISDA asset class not found for TRS " << id () << " , ISDA taxonomy undefined" );
321- } else {
322- additionalData_[" isdaAssetClass" ] = assetClass;
323- if (!assetClassIsUnique) {
324- WLOG (" ISDA asset class not unique in TRS " << id () << " using first hit: " << assetClass);
325- }
326- additionalData_[" isdaBaseProduct" ] = string (" Total Return Swap" );
327- if (assetClass == " Equity" ) {
328- if (tradeType_ == " ContractForDifference" )
329- additionalData_[" isdaBaseProduct" ] = string (" Contract For Difference" );
330- else
331- additionalData_[" isdaBaseProduct" ] = string (" Swap" );
332- additionalData_[" isdaSubProduct" ] = string (" Price Return Basic Performance" );
333- } else if (assetClass == " Credit" ) {
334- additionalData_[" isdaBaseProduct" ] = string (" Total Return Swap" );
335- additionalData_[" isdaSubProduct" ] = string (" " );
336- } else {
337- WLOG (" ISDA asset class " << assetClass << " not explicitly covered for TRS trade " << id ()
338- << " using default BaseProduct 'Total Retuen Swap' and leaving sub-product blank" );
339- }
340- }
341-
342300 creditRiskCurrency_.clear ();
343301 creditQualifierMapping_.clear ();
344302
@@ -516,6 +474,48 @@ void TRS::build(const boost::shared_ptr<EngineFactory>& engineFactory) {
516474 fxIndices.insert (localFxIndices.begin (), localFxIndices.end ());
517475 }
518476
477+ // ISDA taxonomy
478+ bool assetClassIsUnique = true ;
479+ std::string assetClass;
480+ for (auto u : underlying_) {
481+ auto it = u->additionalData ().find (" isdaAssetClass" );
482+ if (it != u->additionalData ().end ()) {
483+ std::string ac = boost::any_cast<std::string>(it->second );
484+ if (assetClass == " " )
485+ assetClass = ac;
486+ else if (ac != assetClass)
487+ assetClassIsUnique = false ;
488+ }
489+ }
490+
491+ additionalData_[" isdaAssetClass" ] = string (" " );
492+ additionalData_[" isdaBaseProduct" ] = string (" " );
493+ additionalData_[" isdaSubProduct" ] = string (" " );
494+ additionalData_[" isdaTransaction" ] = string (" " );
495+
496+ if (assetClass == " " ) {
497+ ALOG (" ISDA asset class not found for TRS " << id () << " , ISDA taxonomy undefined" );
498+ } else {
499+ additionalData_[" isdaAssetClass" ] = assetClass;
500+ if (!assetClassIsUnique) {
501+ WLOG (" ISDA asset class not unique in TRS " << id () << " using first hit: " << assetClass);
502+ }
503+ additionalData_[" isdaBaseProduct" ] = string (" Total Return Swap" );
504+ if (assetClass == " Equity" ) {
505+ if (tradeType_ == " ContractForDifference" )
506+ additionalData_[" isdaBaseProduct" ] = string (" Contract For Difference" );
507+ else
508+ additionalData_[" isdaBaseProduct" ] = string (" Swap" );
509+ additionalData_[" isdaSubProduct" ] = string (" Price Return Basic Performance" );
510+ } else if (assetClass == " Credit" ) {
511+ additionalData_[" isdaBaseProduct" ] = string (" Total Return Swap" );
512+ additionalData_[" isdaSubProduct" ] = string (" " );
513+ } else {
514+ WLOG (" ISDA asset class " << assetClass << " not explicitly covered for TRS trade " << id ()
515+ << " using default BaseProduct 'Total Retuen Swap' and leaving sub-product blank" );
516+ }
517+ }
518+
519519 // check that we have all fx terms that we needed to build the fx indices
520520
521521 QL_REQUIRE (missingFxIndexPairs.empty (), " TRS::build(): missing FXTerms for the following pairs: "
0 commit comments