重整投资的本质是在债务减免和企业经营重续的前提下,用未来的现金流置换当前的负债。
对于重整投资人来说,能否在债权人会议上说服各大债权人支持重整草案,取决于其能否出具一份逻辑严密、基于数学建模的“清偿率对比分析”。
本文将介绍如何使用 Python 实现一个基于现金流折现(NPV)与清偿分配瀑布(Allocation Waterfall)的多情景模拟引擎。
一、 破产清偿瀑布分配模型(Waterfall Distribution)
根据我国《企业破产法》,资产变现金额必须按照严格的顺位进行拨付分配:
1. 破产费用与共益债务 ➔ 2. 有财产担保的债权 ➔ 3. 职工债权 ➔ 4. 税款债权 ➔ 5. 普通债权 (按比例清偿)如果前一顺位的债权未能得到 100% 清偿,则后一顺位的分配金额直接归零。
二、 清偿分配算法的 Python 实现
以下代码演示了如何在基准、重整及悲观三种情景下,自动进行资产变现资金的分配试算:
def calculate_waterfall_payout(total_cash, claims):
"""
claims: 字典,包含各顺位债务金额
{'fees', 'secured', 'employee', 'tax', 'unsecured'}
"""
payout = {k: 0.0 for k in claims.keys()}
remaining_cash = total_cash
# 0. 破产费用
paid = min(remaining_cash, claims['fees'])
payout['fees'] = paid
remaining_cash -= paid
# 1. 担保债权
paid = min(remaining_cash, claims['secured'])
payout['secured'] = paid
remaining_cash -= paid
# 2. 职工债权
paid = min(remaining_cash, claims['employee'])
payout['employee'] = paid
remaining_cash -= paid
# 3. 税款债权
paid = min(remaining_cash, claims['tax'])
payout['tax'] = paid
remaining_cash -= paid
# 4. 普通债权
paid = min(remaining_cash, claims['unsecured'])
payout['unsecured'] = paid
remaining_cash -= paid
# 计算普通债权清偿率
unsecured_rate = round(payout['unsecured'] / max(claims['unsecured'], 1) * 100, 2)
return payout, unsecured_rate
def run_scenarios(assets_value, claims, discount_rate=0.08):
"""
assets_value: 资产评估账面值
"""
# 情景 1:基准清算(假设资产打 6 折快速拍卖)
cash_liquidation = assets_value * 0.6
_, rate_liq = calculate_waterfall_payout(cash_liquidation, claims)
# 情景 2:重整情景(资产维持经营,未来 5 年现金流折现 NPV)
# 假设未来 5 年每年现金净流入 8000 万
future_flows = [80000000] * 5
npv_reorg = sum(val / ((1 + discount_rate) ** t) for t, val in enumerate(future_flows, 1))
# 加上可变现的非核心资产
cash_reorg = npv_reorg + (assets_value * 0.2)
_, rate_reorg = calculate_waterfall_payout(cash_reorg, claims)
return {
"liquidation_rate": rate_liq,
"reorganization_rate": rate_reorg,
"reorganization_npv": round(npv_reorg, 2)
}三、 投资决策与敏感性分析
模型输出后,我们可以进行折现率和变现率的双维度敏感性分析(Sensitivity Analysis),输出资产价值波动 ±10% 时普通清偿率的受损曲线。 通过量化的数据,投资人可以一眼识破重整草案中是否包含过高估计的未来收入,并以此为谈判筹码在重整对价中占据主动。