@@ -435,6 +435,16 @@ def mkDs(x):
435435 return mkTag (("AvgRatio" , [mkDs (_ ) for _ in ds ]))
436436 case ("amountForTargetIrr" , irr , bn ):
437437 return mkTag (("AmountRequiredForTargetIRR" , [irr , bn ]))
438+ case ("dealStat" , _t , s ):
439+ match _t :
440+ case "int" :
441+ return mkTag (("DealStatInt" , s ))
442+ case "float" | "double" | "balance" :
443+ return mkTag (("DealStatBalance" , s ))
444+ case "bool" :
445+ return mkTag (("DealStatBool" , s ))
446+ case "rate" | "ratio" | "percent" :
447+ return mkTag (("DealStatRate" , s ))
438448 case _:
439449 raise RuntimeError (f"Failed to match DS/Formula: { x } " )
440450 except TypeError as e :
@@ -585,7 +595,7 @@ def mkBondType(x):
585595 case {"固定摊还" : schedule } | {"PAC" : schedule }:
586596 return mkTag (("PAC" , mkTag (("BalanceCurve" , schedule ))))
587597 case {"BalanceByPeriod" : bals }:
588- return mkTag (("AmtByPeriod" , mkTag (("WithTrailVal " , bals ))))
598+ return mkTag (("AmtByPeriod" , mkTag (("CurrentVal " , bals ))))
589599 case {"过手摊还" : None } | {"Sequential" : None } | "Sequential" | "过手摊还" :
590600 return mkTag (("Sequential" ))
591601 case {"锁定摊还" : _after } | {"Lockout" : _after }:
@@ -643,9 +653,9 @@ def mkBondRate(x:dict)->dict:
643653def mkStepUp (x ):
644654 match x :
645655 case ("ladder" , d , spd , dp ):
646- return mkTag (("PassDateLadderSpread" , [d , vNum (spd ), mkDatePattern (dp )]))
656+ return mkTag (("PassDateLadderSpread" , [vDate ( d ) , vNum (spd ), mkDatePattern (dp )]))
647657 case ("once" , d , spd ):
648- return mkTag (("PassDateSpread" , [d , vNum (spd )]))
658+ return mkTag (("PassDateSpread" , [vDate ( d ) , vNum (spd )]))
649659 case _:
650660 raise RuntimeError (f"Failed to match bond step up type:{ x } " )
651661
@@ -696,7 +706,7 @@ def mkBnd(bn, x:dict):
696706 dueInt = getValWithKs (x , ["应付利息" , "dueInt" ], defaultReturn = 0 )
697707 duePrin = getValWithKs (x , ["应付本金" , "duePrin" ], defaultReturn = 0 )
698708 dueIntOverInt = getValWithKs (x , ["拖欠利息" , "dueIntOverInt" ], defaultReturn = 0 )
699- mSt = getValWithKs (x , ["调息" , "stepUp" ], defaultReturn = None )
709+ mSt = getValWithKs (x , ["调息" , "stepUp" ], defaultReturn = None , mapping = mkStepUp )
700710 mTxns = getValWithKs (x , ["stmt" , ], defaultReturn = None )
701711 # mStmt = mkTag(("Statement", mkTxn("bond", mTxns))) if mTxns else None
702712 mStmt = mkTxn ("bond" , mTxns ) if mTxns else None
0 commit comments