@@ -52,13 +52,15 @@ class CSA {
5252 const Real& iaHeld, const string& iaType, const Period& marginCallFreq, const Period& marginPostFreq,
5353 const Period& mpr, const Real& collatSpreadPay, const Real& collatSpreadRcv,
5454 const vector<string>& eligCollatCcys, // vector of three letter ISO codes
55- bool applyInitialMargin, Type initialMarginType, const bool calculateIMAmount, const bool calculateVMAmount)
55+ bool applyInitialMargin, Type initialMarginType, const bool calculateIMAmount, const bool calculateVMAmount,
56+ const string& nonExemptIMRegulations)
5657 : type_(type), csaCurrency_(csaCurrency), index_(index), thresholdPay_(thresholdPay),
5758 thresholdRcv_ (thresholdRcv), mtaPay_(mtaPay), mtaRcv_(mtaRcv), iaHeld_(iaHeld), iaType_(iaType),
5859 marginCallFreq_(marginCallFreq), marginPostFreq_(marginPostFreq), mpr_(mpr),
5960 collatSpreadPay_(collatSpreadPay), collatSpreadRcv_(collatSpreadRcv), eligCollatCcys_(eligCollatCcys),
6061 applyInitialMargin_(applyInitialMargin), initialMarginType_(initialMarginType),
61- calculateIMAmount_(calculateIMAmount), calculateVMAmount_(calculateVMAmount) {}
62+ calculateIMAmount_(calculateIMAmount), calculateVMAmount_(calculateVMAmount),
63+ nonExemptIMRegulations_(nonExemptIMRegulations) {}
6264
6365 // ! Inspectors
6466 // @{
@@ -101,7 +103,9 @@ class CSA {
101103 bool calculateIMAmount () { return calculateIMAmount_; }
102104 /* ! Calculate VM from NPV (currently used only for SA-CCR) */
103105 bool calculateVMAmount () { return calculateVMAmount_; }
104-
106+ /* ! IM regulations (whose trade sensitivities are usually exempt from margin/sensi calc) that we wish to include
107+ (currently used only for SA-CCR) */
108+ const string& nonExemptIMRegulations () { return nonExemptIMRegulations_; }
105109 /* ! invert all relevant aspects of the CSA */
106110 void invertCSA ();
107111
@@ -126,6 +130,7 @@ class CSA {
126130 bool applyInitialMargin_;
127131 Type initialMarginType_;
128132 bool calculateIMAmount_, calculateVMAmount_;
133+ string nonExemptIMRegulations_;
129134};
130135
131136CSA::Type parseCsaType (const string& s);
@@ -165,7 +170,8 @@ class NettingSetDefinition : public XMLSerializable {
165170 const Real& collatSpreadPay, const Real& collatSpreadRcv,
166171 const vector<string>& eligCollatCcys, // vector of three letter ISO codes
167172 bool applyInitialMargin = false , const string& initialMarginType = " Bilateral" ,
168- const bool calculateIMAmount = false , const bool calculateVMAmount = false );
173+ const bool calculateIMAmount = false , const bool calculateVMAmount = false ,
174+ const string& nonExemptIMRegulations = " " );
169175
170176 NettingSetDefinition (const string& nettingSetId, const string& bilateral,
171177 const string& csaCurrency, // three letter ISO code
@@ -177,11 +183,12 @@ class NettingSetDefinition : public XMLSerializable {
177183 const Real& collatSpreadPay, const Real& collatSpreadRcv,
178184 const vector<string>& eligCollatCcys, // vector of three letter ISO codes
179185 bool applyInitialMargin = false , const string& initialMarginType = " Bilateral" ,
180- const bool calculateIMAmount = false , const bool calculateVMAmount = false )
186+ const bool calculateIMAmount = false , const bool calculateVMAmount = false ,
187+ const string& nonExemptIMRegulations = " " )
181188 : NettingSetDefinition(NettingSetDetails(nettingSetId), bilateral, csaCurrency, index, thresholdPay,
182189 thresholdRcv, mtaPay, mtaRcv, iaHeld, iaType, marginCallFreq, marginPostFreq, mpr,
183190 collatSpreadPay, collatSpreadRcv, eligCollatCcys, applyInitialMargin, initialMarginType,
184- calculateIMAmount, calculateVMAmount) {}
191+ calculateIMAmount, calculateVMAmount, nonExemptIMRegulations ) {}
185192
186193 /* !
187194 loads NettingSetDefinition object from XML
0 commit comments