@@ -44,25 +44,25 @@ def mkDatePattern(x):
4444 return mkTag (("DayOfMonth" , vInt (_d )))
4545 case ["MonthDayOfYear" , _m , _d ] | ["每年" , _m , _d ] | ("每年" , _m , _d ):
4646 return mkTag (("MonthDayOfYear" ,[vInt (_m ), vInt (_d )]))
47- case ["CustomDate" , * _ds ] | ["Custom" , * _ds ] :
47+ case ["CustomDate" , * _ds ] | ["Custom" , * _ds ] | ( "Custom" , * _ds ) :
4848 return mkTag (("CustomDate" , _ds ))
49- case ["EveryNMonth" , d , n ]:
49+ case ["EveryNMonth" , d , n ] | ( "EveryNMonth" , d , n ) :
5050 return mkTag (("EveryNMonth" , [vDate (d ), vInt (n )]))
5151 case ["Weekday" , n ] if n >= 0 and n <= 6 :
5252 return mkTag (("Weekday" , vInt (n )))
53- case ["all" , * _dps ] | ["All" , * _dps ] | ["AllDatePattern" , * _dps ] | ["+" , * _dps ]:
53+ case ["all" , * _dps ] | ["All" , * _dps ] | ["AllDatePattern" , * _dps ] | ["+" , * _dps ] | ( "+" , * _dps ) | ( "all" , * _dps ) | ( "AllDatePattern" , * _dps ) :
5454 return mkTag (("AllDatePattern" , lmap (mkDatePattern , _dps )))
55- case [">" , _d , dp ] | ["After" , _d , dp ] | ["之后" , _d , dp ]:
55+ case [">" , _d , dp ] | ["After" , _d , dp ] | ["之后" , _d , dp ] | ( ">" , _d , dp ) | ( "After" , _d , dp ) :
5656 return mkTag (("StartsAt" , ["Exc" , vDate (_d ), mkDatePattern (dp ) ]))
57- case [">=" , _d , dp ] :
57+ case [">=" , _d , dp ] | ( ">=" , _d , dp ) :
5858 return mkTag (("StartsAt" , ["Inc" , vDate (_d ), mkDatePattern (dp ) ]))
59- case ["<" , _d , dp ] | ["Before" , _d , dp ] | ["之前" , _d , dp ]:
59+ case ["<" , _d , dp ] | ["Before" , _d , dp ] | ["之前" , _d , dp ] | ( "<" , _d , dp ) | ( "Before" , _d , dp ) :
6060 return mkTag (("EndsAt" , ["Exc" , vDate (_d ), mkDatePattern (dp ) ]))
61- case ["<=" , _d , dp ] :
61+ case ["<=" , _d , dp ] | ( "<=" , _d , dp ) :
6262 return mkTag (("EndsAt" , ["Inc" , vDate (_d ), mkDatePattern (dp ) ]))
63- case ["Exclude" , _d , _dps ] | ["ExcludeDatePattern" , _d , _dps ] | ["排除" , _d , _dps ] | ["-" , _d , _dps ]:
63+ case ["Exclude" , _d , _dps ] | ["ExcludeDatePattern" , _d , _dps ] | ["排除" , _d , _dps ] | ["-" , _d , _dps ] | ( "Exclude" , _d , _dps ) | ( "-" , _d , _dps ) :
6464 return mkTag (("Exclude" , [mkDatePattern (_d ), [mkDatePattern (_ ) for _ in _dps ]]))
65- case ["Offset" , _dp , n ] | ["OffsetDateDattern" , _dp , n ] | ["平移" , _dp , n ]:
65+ case ["Offset" , _dp , n ] | ["OffsetDateDattern" , _dp , n ] | ["平移" , _dp , n ] | ( "Offset" , _dp , n ) :
6666 return mkTag (("OffsetBy" , [mkDatePattern (_dp ), vInt (n )]))
6767 case _x if (_x in datePattern .values ()):
6868 return mkTag ((_x ))
@@ -73,7 +73,7 @@ def mkDatePattern(x):
7373 case _:
7474 raise RuntimeError (f"Failed to match { x } " )
7575
76-
76+ # TODO need to deprecate it
7777def getStartDate (x :dict ) -> tuple :
7878 match x :
7979 case {"封包日" : a , "起息日" : b , "首次兑付日" : c , "法定到期日" : d , "收款频率" : pf , "付款频率" : bf } | \
@@ -87,14 +87,20 @@ def getStartDate(x:dict) -> tuple:
8787 return (vDate (lastCollected ), vDate (pp ))
8888 case {"lastCollect" :a ,"lastPay" :b }:
8989 return (a , b )
90+ case ("accrue" , m ):
91+ return getStartDate (m )
9092 case _:
9193 raise RuntimeError (f"Failed to get Start Date from { x } " )
9294
9395
9496def mkDate (x ):
9597 ''' make dates component for deal '''
9698 match x :
97- case {"cutoff" : a , "closing" : b , "firstPay" : c ,"firstCollect" : d , "stated" : e , "poolFreq" : pf , "payFreq" : bf , "cust" :cust } if isinstance (cust , dict ):
99+ case ("accrue" , m ):
100+ return mkDate (m ) | {"tag" : "AccruedGenericDates" }
101+
102+ case {"cutoff" : a , "closing" : b , "firstPay" : c ,"firstCollect" : d , "stated" : e , "poolFreq" : pf , "payFreq" : bf }:
103+ cust = x .get ("cust" , {})
98104 custom = {f"CustomExeDates { k } " :mkDatePattern (v ) for k ,v in cust .items ()}
99105 m = {
100106 "CutoffDate" :mkDatePattern (vDate (a )),
@@ -106,7 +112,8 @@ def mkDate(x):
106112 "CollectionDates" :mkDatePattern (pf ),
107113 } | custom
108114 return mkTag (("GenericDates" ,m ))
109- case {"lastCollect" : a , "lastPay" : b , "nextPay" : c ,"nextCollect" : d , "stated" : e , "poolFreq" : pf , "payFreq" : bf , "cust" :cust } if isinstance (cust , dict ):
115+ case {"lastCollect" : a , "lastPay" : b , "nextPay" : c ,"nextCollect" : d , "stated" : e , "poolFreq" : pf , "payFreq" : bf } :
116+ cust = x .get ("cust" , {})
110117 custom = {f"CustomExeDates { k } " :mkDatePattern (v ) for k ,v in cust .items ()}
111118 m = {
112119 "LastCollectDate" :mkDatePattern (vDate (a )),
@@ -128,8 +135,7 @@ def mkDate(x):
128135 "DistributionDates" :mkDatePattern (bf ),
129136 "CollectionDates" :mkDatePattern (pf ),
130137 }
131- y = mkTag (("GenericDates" ,m ))
132- return y
138+ return mkTag (("GenericDates" ,m ))
133139 case {"封包日" : a , "起息日" : b , "首次兑付日" : c , "法定到期日" : d , "收款频率" : pf , "付款频率" : bf } | \
134140 {"cutoff" : a , "closing" : b , "firstPay" : c , "stated" : d , "poolFreq" : pf , "payFreq" : bf } if (not "cust" in x ):
135141 firstCollection = x .get ("首次归集日" , b )
@@ -2600,7 +2606,4 @@ def translate(y) -> dict:
26002606 return r
26012607 case [x ,* rest ]:
26022608 return mkNonPerfAssumps (r | translate (x ),rest )
2603- from enum import Enum
2604- import itertools
2605- import sys
2606- import functools
2609+
0 commit comments