CreditDebtGroupSpecification.java

  1. package org.drip.xva.proto;

  2. /*
  3.  * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  4.  */

  5. /*!
  6.  * Copyright (C) 2020 Lakshmi Krishnamurthy
  7.  * Copyright (C) 2019 Lakshmi Krishnamurthy
  8.  * Copyright (C) 2018 Lakshmi Krishnamurthy
  9.  * Copyright (C) 2017 Lakshmi Krishnamurthy
  10.  *
  11.  *  This file is part of DROP, an open-source library targeting analytics/risk, transaction cost analytics,
  12.  *      asset liability management analytics, capital, exposure, and margin analytics, valuation adjustment
  13.  *      analytics, and portfolio construction analytics within and across fixed income, credit, commodity,
  14.  *      equity, FX, and structured products. It also includes auxiliary libraries for algorithm support,
  15.  *      numerical analysis, numerical optimization, spline builder, model validation, statistical learning,
  16.  *      and computational support.
  17.  *  
  18.  *      https://lakshmidrip.github.io/DROP/
  19.  *  
  20.  *  DROP is composed of three modules:
  21.  *  
  22.  *  - DROP Product Core - https://lakshmidrip.github.io/DROP-Product-Core/
  23.  *  - DROP Portfolio Core - https://lakshmidrip.github.io/DROP-Portfolio-Core/
  24.  *  - DROP Computational Core - https://lakshmidrip.github.io/DROP-Computational-Core/
  25.  *
  26.  *  DROP Product Core implements libraries for the following:
  27.  *  - Fixed Income Analytics
  28.  *  - Loan Analytics
  29.  *  - Transaction Cost Analytics
  30.  *
  31.  *  DROP Portfolio Core implements libraries for the following:
  32.  *  - Asset Allocation Analytics
  33.  *  - Asset Liability Management Analytics
  34.  *  - Capital Estimation Analytics
  35.  *  - Exposure Analytics
  36.  *  - Margin Analytics
  37.  *  - XVA Analytics
  38.  *
  39.  *  DROP Computational Core implements libraries for the following:
  40.  *  - Algorithm Support
  41.  *  - Computation Support
  42.  *  - Function Analysis
  43.  *  - Model Validation
  44.  *  - Numerical Analysis
  45.  *  - Numerical Optimizer
  46.  *  - Spline Builder
  47.  *  - Statistical Learning
  48.  *
  49.  *  Documentation for DROP is Spread Over:
  50.  *
  51.  *  - Main                     => https://lakshmidrip.github.io/DROP/
  52.  *  - Wiki                     => https://github.com/lakshmiDRIP/DROP/wiki
  53.  *  - GitHub                   => https://github.com/lakshmiDRIP/DROP
  54.  *  - Repo Layout Taxonomy     => https://github.com/lakshmiDRIP/DROP/blob/master/Taxonomy.md
  55.  *  - Javadoc                  => https://lakshmidrip.github.io/DROP/Javadoc/index.html
  56.  *  - Technical Specifications => https://github.com/lakshmiDRIP/DROP/tree/master/Docs/Internal
  57.  *  - Release Versions         => https://lakshmidrip.github.io/DROP/version.html
  58.  *  - Community Credits        => https://lakshmidrip.github.io/DROP/credits.html
  59.  *  - Issues Catalog           => https://github.com/lakshmiDRIP/DROP/issues
  60.  *  - JUnit                    => https://lakshmidrip.github.io/DROP/junit/index.html
  61.  *  - Jacoco                   => https://lakshmidrip.github.io/DROP/jacoco/index.html
  62.  *
  63.  *  Licensed under the Apache License, Version 2.0 (the "License");
  64.  *      you may not use this file except in compliance with the License.
  65.  *  
  66.  *  You may obtain a copy of the License at
  67.  *      http://www.apache.org/licenses/LICENSE-2.0
  68.  *  
  69.  *  Unless required by applicable law or agreed to in writing, software
  70.  *      distributed under the License is distributed on an "AS IS" BASIS,
  71.  *      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  72.  *  
  73.  *  See the License for the specific language governing permissions and
  74.  *      limitations under the License.
  75.  */

  76. /**
  77.  * <i>CreditDebtGroupSpecification</i> contains the Specification of a Credit/Debt Netting Group. The
  78.  * References are:
  79.  *
  80.  *  <br><br>
  81.  *  <ul>
  82.  *      <li>
  83.  *          Burgard, C., and M. Kjaer (2014): PDE Representations of Derivatives with Bilateral Counter-party
  84.  *              Risk and Funding Costs <i>Journal of Credit Risk</i> <b>7 (3)</b> 1-19
  85.  *      </li>
  86.  *      <li>
  87.  *          Burgard, C., and M. Kjaer (2014): In the Balance <i>Risk</i> <b>24 (11)</b> 72-75
  88.  *      </li>
  89.  *      <li>
  90.  *          Gregory, J. (2009): Being Two-faced over Counter-party Credit Risk <i>Risk</i> <b>20 (2)</b>
  91.  *              86-90
  92.  *      </li>
  93.  *      <li>
  94.  *          Li, B., and Y. Tang (2007): <i>Quantitative Analysis, Derivatives Modeling, and Trading
  95.  *              Strategies in the Presence of Counter-party Credit Risk for the Fixed Income Market</i>
  96.  *              <b>World Scientific Publishing</b> Singapore
  97.  *      </li>
  98.  *      <li>
  99.  *          Piterbarg, V. (2010): Funding Beyond Discounting: Collateral Agreements and Derivatives Pricing
  100.  *              <i>Risk</i> <b>21 (2)</b> 97-102
  101.  *      </li>
  102.  *  </ul>
  103.  *
  104.  *  <br><br>
  105.  *  <ul>
  106.  *      <li><b>Module </b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/PortfolioCore.md">Portfolio Core Module</a></li>
  107.  *      <li><b>Library</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/XVAAnalyticsLibrary.md">XVA Analytics Library</a></li>
  108.  *      <li><b>Project</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/xva/README.md">Valuation Adjustments that account for Collateral, CC Credit/Debt and Funding Overhead</a></li>
  109.  *      <li><b>Package</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/xva/proto/README.md">Collateral, Counter Party, Netting Groups</a></li>
  110.  *  </ul>
  111.  * <br><br>
  112.  *
  113.  * @author Lakshmi Krishnamurthy
  114.  */

  115. public class CreditDebtGroupSpecification extends org.drip.xva.proto.ObjectSpecification
  116. {
  117.     private boolean _contractual = true;
  118.     private boolean _enforceable = true;
  119.     private org.drip.state.identifier.EntityHazardLabel _clientHazardLabel = null;
  120.     private org.drip.state.identifier.EntityHazardLabel _dealerHazardLabel = null;
  121.     private org.drip.state.identifier.EntityRecoveryLabel _clientRecoveryLabel = null;
  122.     private org.drip.state.identifier.EntityRecoveryLabel _dealerSeniorRecoveryLabel = null;
  123.     private org.drip.state.identifier.EntityRecoveryLabel _dealerSubordinateRecoveryLabel = null;

  124.     /**
  125.      * Generate a Standard Instance of CreditDebtGroupSpecification
  126.      *
  127.      * @param id The Collateral Group ID
  128.      * @param name The Collateral Group Name
  129.      * @param dealerHazardLabel The Dealer Hazard Rate Latent State Label
  130.      * @param clientHazardLabel The Client Hazard Rate Latent State Label
  131.      * @param dealerSeniorRecoveryLabel The Dealer Senior Recovery Rate Latent State Label
  132.      * @param clientRecoveryLabel The Client Recovery Rate Latent State Label
  133.      * @param dealerSubordinateRecoveryLabel The Dealer Subordinate Recovery Rate Latent State Label
  134.      *
  135.      * @return Standard Instance of NettingGroupSpecification
  136.      */

  137.     public static final CreditDebtGroupSpecification Standard (
  138.         final java.lang.String id,
  139.         final java.lang.String name,
  140.         final org.drip.state.identifier.EntityHazardLabel dealerHazardLabel,
  141.         final org.drip.state.identifier.EntityHazardLabel clientHazardLabel,
  142.         final org.drip.state.identifier.EntityRecoveryLabel dealerSeniorRecoveryLabel,
  143.         final org.drip.state.identifier.EntityRecoveryLabel clientRecoveryLabel,
  144.         final org.drip.state.identifier.EntityRecoveryLabel dealerSubordinateRecoveryLabel)
  145.     {
  146.         try {
  147.             return new CreditDebtGroupSpecification (
  148.                 id,
  149.                 name,
  150.                 dealerHazardLabel,
  151.                 clientHazardLabel,
  152.                 dealerSeniorRecoveryLabel,
  153.                 clientRecoveryLabel,
  154.                 dealerSubordinateRecoveryLabel,
  155.                 true,
  156.                 true
  157.             );
  158.         }
  159.         catch (java.lang.Exception e)
  160.         {
  161.             e.printStackTrace();
  162.         }

  163.         return null;
  164.     }

  165.     /**
  166.      * CreditDebtGroupSpecification Constructor
  167.      *
  168.      * @param id The Collateral Group ID
  169.      * @param name The Collateral Group Name
  170.      * @param dealerHazardLabel The Dealer Hazard Rate Latent State Label
  171.      * @param clientHazardLabel The Client Hazard Rate Latent State Label
  172.      * @param dealerSeniorRecoveryLabel The Dealer Senior Recovery Rate Latent State Label
  173.      * @param clientRecoveryLabel The Client Recovery Rate Latent State Label
  174.      * @param dealerSubordinateRecoveryLabel The Dealer Subordinate Recovery Rate Latent State Label
  175.      * @param contractual TRUE - The Netting is Contractual
  176.      * @param enforceable TRUE - The Netting is Enforceable
  177.      *
  178.      * @throws java.lang.Exception Thrown if the Inputs are Invalid
  179.      */

  180.     public CreditDebtGroupSpecification (
  181.         final java.lang.String id,
  182.         final java.lang.String name,
  183.         final org.drip.state.identifier.EntityHazardLabel dealerHazardLabel,
  184.         final org.drip.state.identifier.EntityHazardLabel clientHazardLabel,
  185.         final org.drip.state.identifier.EntityRecoveryLabel dealerSeniorRecoveryLabel,
  186.         final org.drip.state.identifier.EntityRecoveryLabel clientRecoveryLabel,
  187.         final org.drip.state.identifier.EntityRecoveryLabel dealerSubordinateRecoveryLabel,
  188.         final boolean contractual,
  189.         final boolean enforceable)
  190.         throws java.lang.Exception
  191.     {
  192.         super (
  193.             id,
  194.             name
  195.         );

  196.         if (null == (_dealerHazardLabel = dealerHazardLabel) ||
  197.             null == (_clientHazardLabel = clientHazardLabel) ||
  198.             null == (_dealerSeniorRecoveryLabel = dealerSeniorRecoveryLabel) ||
  199.             null == (_clientRecoveryLabel = clientRecoveryLabel))
  200.         {
  201.             throw new java.lang.Exception ("CreditDebtGroupSpecification Constructor");
  202.         }

  203.         _contractual = contractual;
  204.         _enforceable = enforceable;
  205.         _dealerSubordinateRecoveryLabel = dealerSubordinateRecoveryLabel;
  206.     }

  207.     /**
  208.      * Indicate if the Netting allowed is Contractual
  209.      *
  210.      * @return TRUE - The Netting allowed is Contractual
  211.      */

  212.     public boolean contractual()
  213.     {
  214.         return _contractual;
  215.     }

  216.     /**
  217.      * Indicate if the Netting is Enforceable
  218.      *
  219.      * @return TRUE - The Netting is Enforceable
  220.      */

  221.     public boolean enforceable()
  222.     {
  223.         return _enforceable;
  224.     }

  225.     /**
  226.      * Retrieve the Dealer Hazard Label
  227.      *
  228.      * @return The Dealer Hazard Label
  229.      */

  230.     public org.drip.state.identifier.EntityHazardLabel dealerHazardLabel()
  231.     {
  232.         return _dealerHazardLabel;
  233.     }

  234.     /**
  235.      * Retrieve the Client Hazard Label
  236.      *
  237.      * @return The Client Hazard Label
  238.      */

  239.     public org.drip.state.identifier.EntityHazardLabel clientHazardLabel()
  240.     {
  241.         return _clientHazardLabel;
  242.     }

  243.     /**
  244.      * Retrieve the Dealer Senior Recovery Label
  245.      *
  246.      * @return The Dealer Senior Recovery Label
  247.      */

  248.     public org.drip.state.identifier.EntityRecoveryLabel dealerSeniorRecoveryLabel()
  249.     {
  250.         return _dealerSeniorRecoveryLabel;
  251.     }

  252.     /**
  253.      * Retrieve the Dealer Subordinate Recovery Label
  254.      *
  255.      * @return The Dealer Subordinate Recovery Label
  256.      */

  257.     public org.drip.state.identifier.EntityRecoveryLabel dealerSubordinateRecoveryLabel()
  258.     {
  259.         return _dealerSubordinateRecoveryLabel;
  260.     }

  261.     /**
  262.      * Retrieve the Client Recovery Label
  263.      *
  264.      * @return The Client Recovery Label
  265.      */

  266.     public org.drip.state.identifier.EntityRecoveryLabel clientRecoveryLabel()
  267.     {
  268.         return _clientRecoveryLabel;
  269.     }
  270. }