@@ -1410,9 +1410,9 @@ def mkAmortPlan(x) -> dict:
14101410 return mkTag (("NO_FirstN" , [n , mkAmortPlan (_pt )]))
14111411 case ("IO_FirstN" , n , _pt ):
14121412 return mkTag (("IO_FirstN" , [n , mkAmortPlan (_pt )]))
1413- case ("计划还款" , ts , Dp ) | ("Schedule" , ts , Dp ):
1413+ case ("计划还款" , ts , Dp ) | ("Schedule" , ts , Dp ) | ( "schedule" , ts , Dp ) :
14141414 return mkTag (("ScheduleRepayment" , [mkTs ("RatioCurve" , ts ), mkDatePattern (Dp )]))
1415- case ("计划还款" , ts ) | ("Schedule" , ts ):
1415+ case ("计划还款" , ts ) | ("Schedule" , ts ) | ( "schedule" , ts ) :
14161416 return mkTag (("ScheduleRepayment" , [mkTs ("RatioCurve" , ts ), None ]))
14171417 case ("Balloon" , n ):
14181418 return mkTag (("Balloon" , n ))
@@ -1524,6 +1524,15 @@ def mkLeaseStepUp(x):
15241524 return mkTag (("ByAmountCurve" , vList (bs , vNum )))
15251525 case _ :
15261526 raise RuntimeError (f"Failed to match { x } :mkLeaseStepUp" )
1527+
1528+ def mkLeaseCalc (x ):
1529+ match x :
1530+ case ("byDay" , dr , dp ):
1531+ return mkTag (("ByDayRate" , [dr , mkDatePattern (dp )]))
1532+ case ("byPeriod" , rental , period ):
1533+ return mkTag (("ByPeriodRetnal" , [rental , period ]))
1534+ case _ :
1535+ raise RuntimeError (f"Failed to match { x } :mkLeaseCalc" )
15271536
15281537
15291538def mkAsset (x ):
@@ -1600,25 +1609,28 @@ def mkAsset(x):
16001609 vNum (currentBalance ),
16011610 vInt (remainTerms ),
16021611 mkAssetStatus (status )]))
1603- case ["租赁" , {"固定租金" : dailyRate , "初始期限" : originTerm , "频率" : dp , "起始日" : startDate , "状态" : status , "剩余期限" : remainTerms }] \
1604- | ["Lease" , {"fixRental" : dailyRate , "originTerm" : originTerm , "freq" : dp , "originDate" : startDate , "status" : status , "remainTerm" : remainTerms }]:
1612+ case ["租赁" , {"租金" : rental , "初始期限" : originTerm , "起始日" : startDate }
1613+ ,{"当前余额" : bal , "剩余期限" : remainTerms ,"状态" : status }] \
1614+ | ["Lease" , {"rental" : rental , "originTerm" : originTerm , "originDate" : startDate }
1615+ , {"currentBalance" : bal ,"status" : status , "remainTerm" : remainTerms }]:
16051616 obligorInfo = getValWithKs (x [1 ],["obligor" ,"借款人" ], mapping = mkObligor )
16061617 return mkTag (("RegularLease"
1607- , [{"originTerm" : originTerm , "startDate" : startDate , "paymentDates " : mkDatePattern ( dp ), "originRental" : dailyRate
1618+ , [{"originTerm" : originTerm , "startDate" : startDate , "originRental " : mkLeaseCalc ( rental )
16081619 ,"obligor" : obligorInfo } | mkTag ("LeaseInfo" )
1609- , 0
1610- , remainTerms
1620+ , vNum ( bal )
1621+ , vInt ( remainTerms )
16111622 , mkAssetStatus (status )]))
1612- case ["租赁" , {"初始租金" : dailyRate , "初始期限" : originTerm , "频率" : dp , "起始日" : startDate , "状态" : status , "剩余期限" : remainTerms ,"调整" :sut }] \
1613- | ["Lease" , {"initRental" : dailyRate , "stepUp" :sut , "originTerm" : originTerm , "freq" : dp , "originDate" : startDate , "status" : status , "remainTerm" : remainTerms }]:
1614-
1623+ case ["租赁" , {"租金" : rental , "初始期限" : originTerm , "起始日" : startDate , "调整" :sut }
1624+ ,{"当前余额" :bal ,"状态" : status , "剩余期限" : remainTerms }] \
1625+ | ["Lease" , {"rental" : rental , "stepUp" :sut , "originTerm" : originTerm , "originDate" : startDate }
1626+ ,{"currentBalance" :bal , "status" : status , "remainTerm" : remainTerms }]:
16151627 obligorInfo = getValWithKs (x [1 ],["obligor" ,"借款人" ], mapping = mkObligor )
16161628 _stepUpType = mkLeaseStepUp (sut )
16171629 return mkTag (("StepUpLease"
1618- , [{"originTerm" : originTerm , "startDate" : startDate , "paymentDates " : mkDatePattern ( dp ), "originRental" : dailyRate , "obligor" : obligorInfo } | mkTag ("LeaseInfo" )
1630+ , [{"originTerm" : originTerm , "startDate" : startDate , "originRental " : mkLeaseCalc ( rental ) , "obligor" : obligorInfo } | mkTag ("LeaseInfo" )
16191631 , _stepUpType
1620- , 0
1621- , remainTerms
1632+ , vNum ( bal )
1633+ , vInt ( remainTerms )
16221634 , mkAssetStatus (status )]))
16231635 case ["固定资产" ,{"起始日" :sd ,"初始余额" :ob ,"初始期限" :ot ,"残值" :rb ,"周期" :p ,"摊销" :ar ,"产能" :cap }
16241636 ,{"剩余期限" :rt ,"余额" :bal }] \
@@ -1745,7 +1757,7 @@ def mkAssumpDefault(x):
17451757 case {"byTerm" : rs }:
17461758 return mkTag (("DefaultByTerm" , vListOfList (rs , numVal )))
17471759 case _ :
1748- raise RuntimeError (f"failed to match { x } " )
1760+ raise RuntimeError (f"failed to match { x } :mkAssumpDefault " )
17491761
17501762
17511763def mkAssumpPrepay (x ):
@@ -1764,7 +1776,7 @@ def mkAssumpPrepay(x):
17641776 case {"byTerm" : rs }:
17651777 return mkTag (("PrepaymentByTerm" , vListOfList (rs , numVal )))
17661778 case _ :
1767- raise RuntimeError (f"failed to match { x } " )
1779+ raise RuntimeError (f"failed to match { x } :mkAssumpPrepay " )
17681780
17691781
17701782def mkAssumpDelinq (x ):
@@ -1773,19 +1785,17 @@ def mkAssumpDelinq(x):
17731785 case {"DelinqCDR" : cdr , "Lag" : lag , "DefaultPct" : pct }:
17741786 return mkTag (("DelinqCDR" , [cdr , (lag , pct )]))
17751787 case _:
1776- raise RuntimeError (f"failed to match { x } " )
1788+ raise RuntimeError (f"failed to match { x } :mkAssumpDelinq " )
17771789
17781790
17791791def mkAssumpLeaseGap (x ):
17801792 match x :
1781- case {"Days" :d }:
1793+ case {"Days" :d } | ( "days" , d ) :
17821794 return mkTag (("GapDays" ,vInt (d )))
1783- case {"DaysByAmount" :(tbl ,d )}:
1784- return mkTag (("GapDaysByAmount" ,[tbl , vInt (d )]))
1785- case {"DaysByCurve" : ts }:
1786- return mkTag (("GapDaysByCurve" ,mkTs ("IntCurve" ,ts )))
1795+ case ("byCurve" , c ):
1796+ return mkTag (("GapDaysByCurve" , mkTs ("IntCurve" ,c )))
17871797 case _:
1788- raise RuntimeError (f"failed to match { x } " )
1798+ raise RuntimeError (f"failed to match { x } :mkAssumpLeaseGap " )
17891799
17901800
17911801def mkAssumpLeaseRent (x ):
@@ -1795,18 +1805,26 @@ def mkAssumpLeaseRent(x):
17951805 case {"CurveIncrease" :rc } | ("byRateCurve" , rc ):
17961806 return mkTag (("BaseCurve" , mkTs ("RateCurve" ,rc )))
17971807 case _:
1798- raise RuntimeError (f"failed to match { x } " )
1808+ raise RuntimeError (f"failed to match { x } :mkAssumpLeaseRent " )
17991809
18001810
18011811def mkAssumpLeaseEndType (x ):
18021812 match x :
1803- case {"byDate" :d } | ("byDate" ,d ):
1804- return mkTag ("CutByDate" ,vDate (d ))
1813+ case {"byDate" :d } | ("byDate" , d ):
1814+ return mkTag ("CutByDate" , vDate (d ))
18051815 case {"stopByExtNum" :n } | ("byExtTimes" ,n ):
1806- return mkTag ("StopByExtTimes" ,vInt (n ))
1816+ return mkTag ("StopByExtTimes" , vInt (n ))
18071817 case _:
1808- raise RuntimeError (f"failed to match { x } " )
1818+ raise RuntimeError (f"failed to match { x } :mkAssumpLeaseEndType " )
18091819
1820+ def mkAssumpLeaseDefaultType (x ):
1821+ match x :
1822+ case ("byContinuation" ,r ):
1823+ return mkTag (("DefaultByContinuation" , vNum (r )))
1824+ case ("byTermination" ,r ):
1825+ return mkTag (("DefaultByTermination" , vNum (r )))
1826+ case _:
1827+ raise RuntimeError (f"failed to match { x } " )
18101828
18111829
18121830def mkAssumpRecovery (x ):
@@ -1876,7 +1894,7 @@ def mkExtraStress(y):
18761894 r = earlyReturnNone (mkAssumpRecovery ,mr )
18771895 return mkTag (("MortgageAssump" ,[d ,p ,r ,mkExtraStress (mes )]))
18781896 case ("Lease" , md , gap , rent , endType ):
1879- return mkTag (("LeaseAssump" ,[earlyReturnNone (mkAssumpDefault ,md )
1897+ return mkTag (("LeaseAssump" ,[earlyReturnNone (mkAssumpLeaseDefaultType ,md )
18801898 ,mkAssumpLeaseGap (gap )
18811899 ,mkAssumpLeaseRent (rent )
18821900 ,mkEndType (endType )
0 commit comments