TaxAccountingScheme.java

  1. package org.drip.portfolioconstruction.core;

  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>TaxAccountingScheme</i> contains the Attributes for the specified Tax Accounting Scheme.
  78.  *
  79.  *  <br><br>
  80.  *  <ul>
  81.  *      <li><b>Module </b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/PortfolioCore.md">Portfolio Core Module</a></li>
  82.  *      <li><b>Library</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/AssetAllocationAnalyticsLibrary.md">Asset Allocation Analytics</a></li>
  83.  *      <li><b>Project</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/portfolioconstruction/README.md">Portfolio Construction under Allocation Constraints</a></li>
  84.  *      <li><b>Package</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/portfolioconstruction/core/README.md">Core Portfolio Construction Component Suite</a></li>
  85.  *  </ul>
  86.  * <br><br>
  87.  *
  88.  * @author Lakshmi Krishnamurthy
  89.  */

  90. public class TaxAccountingScheme
  91.     extends org.drip.portfolioconstruction.core.Block
  92. {
  93.     private int _washDays = -1;
  94.     private int _shortTermDays = -1;
  95.     private double _longTermTaxRate = java.lang.Double.NaN;
  96.     private double _shortTermTaxRate = java.lang.Double.NaN;

  97.     /**
  98.      * TaxAccountingScheme Constructor
  99.      *
  100.      * @param name The Name
  101.      * @param id The ID
  102.      * @param description The Description
  103.      * @param shortTermTaxRate Short Term Tax Rate
  104.      * @param longTermTaxRate Long Term Tax Rate
  105.      * @param shortTermDays Short Term Days
  106.      * @param washDays Wash Days
  107.      *
  108.      * @throws java.lang.Exception Thrown if the Inputs are Invalid
  109.      */

  110.     public TaxAccountingScheme (
  111.         final java.lang.String name,
  112.         final java.lang.String id,
  113.         final java.lang.String description,
  114.         final double shortTermTaxRate,
  115.         final double longTermTaxRate,
  116.         final int shortTermDays,
  117.         final int washDays)
  118.         throws java.lang.Exception
  119.     {
  120.         super (
  121.             name,
  122.             id,
  123.             description
  124.         );

  125.         if (!org.drip.numerical.common.NumberUtil.IsValid (_shortTermTaxRate = shortTermTaxRate) ||
  126.             !org.drip.numerical.common.NumberUtil.IsValid (_longTermTaxRate = longTermTaxRate) ||
  127.             -1 >= (_shortTermDays = shortTermDays) ||
  128.             -1 >= (_washDays = washDays))
  129.         {
  130.             throw new java.lang.Exception (
  131.                 "TaxAccountingScheme Constructor => Invalid Inputs"
  132.             );
  133.         }
  134.     }

  135.     /**
  136.      * Retrieve the Short Term Tax Rate
  137.      *
  138.      * @return The Short Term Tax Rate
  139.      */

  140.     public double shortTermTaxRate()
  141.     {
  142.         return _shortTermTaxRate;
  143.     }

  144.     /**
  145.      * Retrieve the Long Term Tax Rate
  146.      *
  147.      * @return The Long Term Tax Rate
  148.      */

  149.     public double longTermTaxRate()
  150.     {
  151.         return _longTermTaxRate;
  152.     }

  153.     /**
  154.      * Retrieve the Short Term Days
  155.      *
  156.      * @return The Short Term Days
  157.      */

  158.     public int shortTermDays()
  159.     {
  160.         return _shortTermDays;
  161.     }

  162.     /**
  163.      * Retrieve the Wash Days
  164.      *
  165.      * @return The Wash Days
  166.      */

  167.     public int washDays()
  168.     {
  169.         return _washDays;
  170.     }
  171. }