001 /*
002 * Copyright 2011 The Kuali Foundation.
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.kfs.module.endow.document.service;
017
018 import java.math.BigDecimal;
019 import java.util.Collection;
020
021 import org.kuali.kfs.module.endow.businessobject.CurrentTaxLotBalance;
022 import org.kuali.kfs.module.endow.businessobject.HoldingTaxLot;
023 import org.kuali.rice.kns.util.KualiInteger;
024
025 public interface CurrentTaxLotService {
026
027 /**
028 * Gets a current tax lot based on primary keys: kemid, security id, registration code, lot number and IP indicator.
029 *
030 * @param kemid
031 * @param securityId
032 * @param registrationCode
033 * @param lotNumber
034 * @param ipIndicator
035 * @return the corresponding tax lot
036 */
037 public CurrentTaxLotBalance getByPrimaryKey(String kemid, String securityId, String registrationCode, KualiInteger lotNumber, String ipIndicator);
038
039 /**
040 * Gets matching records from END_CRNT_TAX_LOT_BAL_T table
041 * @param securityId
042 * @return currentTaxLotBal Records from the table matching the securityId
043 */
044 public Collection<CurrentTaxLotBalance>getCurrentTaxLotBalancesBySecurityId(String securityId);
045
046 /**
047 * Gets matching records from END_CRNT_TAX_LOT_BAL_T table
048 * @param securityClassCode, securityId
049 * @return currentTaxLotBal Records from the table matching the securityClassCode, securityId
050 */
051 public Collection<CurrentTaxLotBalance>getCurrentTaxLotBalancesForMatchingSecurityClassCode(String securityClassCode);
052
053
054 /**
055 * Gets matching records from END_CRNT_TAX_LOT_BAL_T table
056 * @param securityClassCode, securityId
057 * @return currentTaxLotBal Records from the table matching the securityClassCode, securityId
058 */
059 public Collection<CurrentTaxLotBalance>getCurrentTaxLotBalancesForMatchingSecurityClassCodeAndSecurityId(String securityClassCode, String securityId);
060
061 /**
062 * Gets matching records from END_CRNT_TAX_LOT_BAL_T table
063 * @param incomePrincipalIndicator
064 * @return currentTaxLotBalances Records from the table matching the incomePrincipalIndicator
065 */
066 public Collection<CurrentTaxLotBalance>getCurrentTaxLotBalancesByIncomePrincipalIndicator(String incomePrincipalIndicator);
067 /**
068 * updates a current tax lot
069 *
070 * @param currentTaxLotBalances
071 */
072 public void updateCurrentTaxLotBalance(CurrentTaxLotBalance currentTaxLotBalance);
073
074 /**
075 * clears all the records from the CurrentTaxLotBalance table.
076 */
077 public void clearAllCurrentTaxLotRecords();
078
079 /**
080 * Method to copy HoldingTaxLot record to currentTaxLotBalance record
081 *
082 * @param holdingTaxLot
083 * @return currentTaxLotBalance
084 */
085 public CurrentTaxLotBalance copyHoldingTaxLotToCurrentTaxLotBalance(HoldingTaxLot holdingTaxLot);
086
087 /**
088 * Method to get the security unit value for the current balance tax lot record
089 *
090 * @param securityId
091 * @return securityUnitValue
092 */
093 public BigDecimal getCurrentTaxLotBalanceSecurityUnitValue(String securityId);
094
095 /**
096 * Method to calculate Next Twelve Months Estimated value
097 *
098 * @param securityId
099 * @return nextTwelveMonthsEstimatedValue
100 */
101 public BigDecimal getNextTwelveMonthsEstimatedValue(HoldingTaxLot holdingTaxLot, String securityId);
102
103 /**
104 * Method to calculate remainder of fiscal year estimated income
105 *
106 * @param securityId
107 * @return remainderOfFiscalYearEstimatedIncome
108 */
109 public BigDecimal getRemainderOfFiscalYearEstimatedIncome(HoldingTaxLot holdingTaxLot, String securityId);
110
111 /**
112 * Method to calculate next fiscal year investment income
113 *
114 * @param securityId
115 * @return nextFiscalyearInvestmentIncome
116 */
117 public BigDecimal getNextFiscalYearInvestmentIncome(HoldingTaxLot holdingTaxLot, String securityId);
118
119 /**
120 * Gets the Sum of the HLDG _MVAL for all records for the Security in END_CURR_TAX_LOT_BAL_T.
121 *
122 * @param securityId the security for which we return the sum
123 * @return the Sum of the HLDG _MVAL for all records for the Security
124 */
125 public BigDecimal getHoldingMarketValueSumForSecurity(String securityId);
126
127 /**
128 * Retrieves all the records from END_CURR_TAX_LOT_BAL_T
129 * @return currentBalances
130 */
131 public Collection<CurrentTaxLotBalance> getAllCurrentTaxLotBalance();
132
133 /**
134 * Gets the holding market value as follows:
135 * Class type code = B => MV = Units x Unit value / 100
136 * Class type code = A => Market Valuation (END_SEC_T: SEC_VAL_BY_MKT) minus the total cash activity
137 * (income and principal) since the last value date (END_SEC_T: SEC_VAL_DT)
138 * Class type code = O => Units x Unit value
139 */
140 public BigDecimal getHoldingMarketValue(HoldingTaxLot holdingTaxLot, String securityId);
141 }