77from lenses import lens
88import pandas as pd
99from schema import Or
10+ from rich .console import Console
11+
1012
1113from .interface import mkTag
1214from .util import mkTs , readTagStr , subMap , subMap2 , renameKs , ensure100
1315from .util import mapListValBy , uplift_m_list , mapValsBy , allList , getValWithKs , applyFnToKey ,flat
1416from .util import earlyReturnNone , mkFloatTs , mkRateTs , mkRatioTs , mkTbl , mapNone , guess_pool_flow_header
15- from .util import filter_by_tags , enumVals , lmap , readTagMap , patchDicts ,updateKs
17+ from .util import filter_by_tags , enumVals , lmap , readTagMap , patchDicts ,updateKs , ensureKeysInMap
1618from .base import *
1719
1820from ..validation import vDict , vList , vStr , vNum , vInt , vDate , vFloat , vBool , vTuple , vListOfList
1921
2022numVal = Or (float ,int )
21-
23+ console = Console ()
2224
2325def mkLiq (x ):
2426 ''' make pricing method '''
@@ -2101,10 +2103,11 @@ def mkLiqProviderType(x):
21012103 case {}:
21022104 return mkTag (("UnLimit" ))
21032105 case _:
2104- raise RuntimeError (f"Failed to match LiqProvider Type: { x } " )
2106+ raise RuntimeError (f"Failed to match LiqProvider Type: { x } " )
21052107
21062108
21072109def mkLiqProvider (n : str , x : dict ):
2110+ ensureKeysInMap (x ,["start" ,],msg = "Init liquidity provider" )
21082111 x_transformed = renameKs (x ,[("已提供" ,"liqBalance" ),("应付利息" ,"liqDueInt" ),("应付费用" ,"liqDuePremium" )
21092112 ,("利率" ,"liqRate" ),("费率" ,"liqPremiumRate" ),("记录" ,"liqStmt" )
21102113 ,("name" ,"liqName" ),("type" ,"liqType" )
@@ -2114,7 +2117,8 @@ def mkLiqProvider(n: str, x: dict):
21142117 ,("rateType" ,"liqRateType" ),("feeType" ,"liqPremiumRateType" )
21152118 ,("dueIntDate" ,"liqDueIntDate" )
21162119 ,("balance" ,"liqBalance" )
2117- ,("end" ,"liqEnds" ),("start" ,"liqStart" )
2120+ ,("end" ,"liqEnds" )
2121+ ,("start" ,"liqStart" )
21182122 ,("stmt" ,"liqStmt" )
21192123 ,("creditCalc" ,"liqCreditCalc" )
21202124 ]
@@ -2200,15 +2204,20 @@ def mkCollection(x):
22002204 raise RuntimeError (f"Failed to match collection rule { x } " )
22012205
22022206
2203- def mkFee (x , fsDate = None ):
2207+ def mkFee (x ):
22042208 match x :
22052209 case {"name" :fn , "type" : feeType , ** fi }:
2206- opt_fields = subMap (fi , [("feeStart" ,fsDate ),("feeDueDate" ,None ),("feeDue" ,0 ),
2207- ("feeArrears" ,0 ),("feeLastPaidDate" ,None )])
2210+ if "feeStart" not in fi :
2211+ raise RuntimeError ("feeStart not found in fee:after version 0.45.x fee must to include field feeStart" )
2212+ opt_fields = subMap (fi , [("feeDueDate" ,None ),("feeDue" ,0 ),
2213+ ("feeArrears" ,0 ),("feeLastPaidDate" ,None ),
2214+ ("feeStart" ,None )])
22082215 return {"feeName" : vStr (fn ), "feeType" : mkFeeType (feeType )} | opt_fields
22092216 case {"名称" :fn , "类型" : feeType , ** fi }:
2210- opt_fields = subMap2 (fi , [("起算日" ,"feeStart" ,fsDate ),("计算日" ,"feeDueDate" ,None ),("应计费用" ,"feeDue" ,0 ),
2211- ("拖欠" ,"feeArrears" ,0 ),("上次缴付日期" ,"feeLastPaidDay" ,None )])
2217+ print ("fee info" , fi )
2218+ opt_fields = subMap2 (fi , [("计算日" ,"feeDueDate" ,None ),("应计费用" ,"feeDue" ,0 ),
2219+ ("拖欠" ,"feeArrears" ,0 ),("上次缴付日期" ,"feeLastPaidDay" ,None ),
2220+ ("起始日" ,"feeStart" ,None )])
22122221 return {"feeName" : vStr (fn ), "feeType" : mkFeeType (feeType )} | opt_fields
22132222 case _:
22142223 raise RuntimeError (f"Failed to match fee: { x } " )
@@ -2245,7 +2254,6 @@ def mkIrrType(x):
22452254 raise RuntimeError (f"Failed to match irrType: { x } " )
22462255
22472256
2248-
22492257def mkPricingAssump (x ):
22502258 match x :
22512259 case ("pv" ,pricingDay ,xs ) | {"贴现日" : pricingDay , "贴现曲线" : xs } | {"date" : pricingDay , "curve" : xs }| {"PVDate" : pricingDay , "PVCurve" : xs }:
0 commit comments