module DealTest.ResecDealTest(baseCase) where import Test.Tasty import Test.Tasty.HUnit import Deal import qualified Accounts as A import qualified Stmt as S import qualified Pool as P import qualified Asset as Ast import qualified AssetClass.Mortgage as ACM import qualified AssetClass.AssetBase as AB import qualified Expense as F import qualified Deal.DealBase as D import qualified Deal as DR import qualified Liability as L import qualified Waterfall as W import qualified Cashflow as CF import qualified Assumptions as AP import qualified Call as C import InterestRate import qualified CreditEnhancement as CE import qualified Triggers as Trg import Lib import Types import qualified Data.Map as Map import qualified Data.Time as T import qualified Data.Set as S import Numeric.Lens (base) import qualified Types as P dummySt = (0,Lib.toDate "19000101",Nothing) baseCase = D.TestDeal { D.name = "base case" ,D.status = Amortizing ,D.rateSwap = Nothing ,D.currencySwap = Nothing ,D.dates = CurrentDates (toDate "20220101",toDate "20220101") Nothing (toDate "20300101") (toDate "20220201" , MonthFirst) (toDate "20220225" , MonthFirst) ,D.accounts = (Map.fromList [("General", (A.Account { A.accName="General" ,A.accBalance=1000.0 ,A.accType=Nothing, A.accInterest=Nothing ,A.accStmt=Nothing }))]) ,D.fees = Map.empty ,D.bonds = (Map.fromList [("A" ,L.Bond{ L.bndName="A" ,L.bndType=L.Sequential ,L.bndOriginInfo= L.OriginalInfo{ L.originBalance=3000 ,L.originDate= (T.fromGregorian 2022 1 1) ,L.originRate= 0.08 ,L.maturityDate = Nothing} ,L.bndInterestInfo= L.Fix 0.08 DC_ACT_365F ,L.bndBalance=3000 ,L.bndRate=0.08 ,L.bndDuePrin=0.0 ,L.bndDueInt=0.0 ,L.bndDueIntDate=Nothing ,L.bndLastIntPay = Just (T.fromGregorian 2022 1 1) ,L.bndLastPrinPay = Just (T.fromGregorian 2022 1 1) ,L.bndStmt=Nothing}) ] ) ,D.pool = D.MultiPool (Map.fromList [(PoolConsol, (P.Pool {P.assets=[AB.Mortgage AB.MortgageOriginalInfo{ AB.originBalance=4000 ,AB.originRate=Fix DC_ACT_365F 0.085 ,AB.originTerm=60 ,AB.period=Monthly ,AB.startDate=T.fromGregorian 2022 1 1 ,AB.prinType= AB.Level ,AB.prepaymentPenalty = Nothing} 4000 0.085 60 Nothing AB.Current] ,P.futureCf=Nothing ,P.asOfDate = T.fromGregorian 2022 1 1 ,P.issuanceStat = Nothing ,P.extendPeriods = Nothing}))]) ,D.waterfall = Map.fromList [(W.DistributionDay Amortizing, [ (W.PayInt Nothing "General" ["A"] Nothing) ,(W.PayPrin Nothing "General" ["A"] Nothing) ])] ,D.collects = [W.Collect Nothing W.CollectedInterest "General" ,W.Collect Nothing W.CollectedPrincipal "General"] } resecDeal = D.TestDeal { D.name = "Top Deal" ,D.status = Amortizing ,D.rateSwap = Nothing ,D.currencySwap = Nothing ,D.dates = CurrentDates (toDate "20220101",toDate "20220101") Nothing (toDate "20300101") (toDate "20220201" , MonthFirst) (toDate "20220225" , MonthFirst) ,D.accounts = (Map.fromList [("General", (A.Account { A.accName="General" ,A.accBalance=1000.0 ,A.accType=Nothing, A.accInterest=Nothing ,A.accStmt=Nothing }))]) ,D.fees = Map.empty ,D.bonds = (Map.fromList [("A" ,L.Bond{ L.bndName="A" ,L.bndType=L.Sequential ,L.bndOriginInfo= L.OriginalInfo{ L.originBalance=3000 ,L.originDate= (T.fromGregorian 2022 1 1) ,L.originRate= 0.08 ,L.maturityDate = Nothing} ,L.bndInterestInfo= L.Fix 0.08 DC_ACT_365F ,L.bndBalance=3000 ,L.bndRate=0.08 ,L.bndDuePrin=0.0 ,L.bndDueInt=0.0 ,L.bndDueIntDate=Nothing ,L.bndLastIntPay = Just (T.fromGregorian 2022 1 1) ,L.bndLastPrinPay = Just (T.fromGregorian 2022 1 1) ,L.bndStmt=Nothing}) ] ) ,D.pool = D.ResecDeal (Map.fromList [(DealBondFlow "base case" "A" (toDate "20200101") 0.25 , D.UnderlyingDeal baseCase CF.emptyCashflow CF.emptyCashflow Nothing)]) ,D.waterfall = Map.fromList [(W.DistributionDay Amortizing, [ (W.PayInt Nothing "General" ["A"] Nothing) ,(W.PayPrin Nothing "General" ["A"] Nothing) ])] ,D.collects = [W.Collect Nothing W.CollectedInterest "General" ,W.Collect Nothing W.CollectedPrincipal "General"] }