4. 预测指标:完工估算(EAC)与完工尚需绩效指数(TCPI)在结算中的应用
在工程项目结算审核中,仅靠截止到当前的偏差指标(CV、SV)无法判断项目最终的成本走势。完工估算(EAC)与完工尚需绩效指数(TCPI)提供了从“当前状态”向“最终结果”预测的桥梁。结算审核人员利用这两个指标,可以判断承包商的成本控制是否在可控范围内,以及未来需要以何种效率完成剩余工作。
4.1 完工估算(EAC)的三种典型算法
EAC 代表在某一测量时点,预测项目完工时所需的总成本。根据项目当前偏差的性质与未来预期,结算审核中通常采用以下三种算法:
| 算法类型 | 计算公式 | 适用场景(结算审核视角) |
|---|---|---|
| EAC = AC + (BAC - EV) | 实际成本 + 剩余工作原预算 | 当前偏差由一次性事件引起,剩余工作可按原预算效率执行。结算中常用于非承包商责任的变更或索赔已关闭的情况。 |
| EAC = BAC / CPI | 总预算 / 成本绩效指数 | 当前偏差具有典型性,未来成本绩效趋势与当前一致。结算中常用于承包商管理不善导致持续超支,且无改进措施。 |
| EAC = AC + (BAC - EV) / (CPI × SPI) | 实际成本 + 剩余工作按综合效率执行 | 进度与成本双重偏差,且两者相互影响。结算中常用于工期延误与成本超支并存的复杂项目。 |
结算审核提示: 在结算审核中,审计方应要求承包商提供选择 EAC 算法的依据。若承包商采用“BAC / CPI”算法,需重点审查其 CPI 是否剔除了非典型异常点,避免人为压低 EAC 以掩盖超支事实。
4.2 完工尚需绩效指数(TCPI)的结算逻辑
TCPI 表示在剩余预算内完成剩余工作所需达到的成本绩效水平。结算审核中,TCPI 用于评估承包商后续成本控制的可行性。其核心公式有两种口径:
- 基于 BAC 的口径(目标不变): TCPI = (BAC - EV) / (BAC - AC)
- 基于 EAC 的口径(目标调整): TCPI = (BAC - EV) / (EAC - AC)
当 TCPI > 1 时,表示剩余工作必须以高于当前效率的水平执行,这在结算审核中通常被视为高风险信号,意味着承包商可能面临严重的成本压力,甚至可能通过降低质量或虚报工程量来弥补。
审计风险点: 若结算审核时发现 TCPI(基于 BAC)持续大于 1.2,且承包商无法提供合理的改进计划,审计方应启动专项审查,重点核实剩余工程量的真实性与计价依据,防止承包商通过后期突击报量来平衡成本。
4.3 EAC 与 TCPI 在结算审核中的联动分析
结算审核不应孤立地看 EAC 或 TCPI,而应将两者结合,形成完整的预测闭环。下图展示了从当前绩效数据到最终结算结论的联动流程:
4.4 结算审核中的实战应用步骤
在工程项目结算审核中,应用 EAC 与 TCPI 可按以下步骤执行:
- 数据采集与验证: 从项目管理系统或结算报表中提取 EV、AC、BAC 数据,确保数据口径一致(通常以批准预算为基准)。
- EAC 计算与算法选择: 根据偏差性质选择 EAC 算法,计算预测完工成本。若 EAC 显著偏离 BAC,需记录偏差原因。
- TCPI 计算与阈值判断: 计算基于 BAC 的 TCPI,判断剩余工作所需效率。若 TCPI > 1.1,标记为高风险项。
- 联动分析与审计意见: 结合 EAC 与 TCPI 结果,形成结算审核意见。若 EAC 超支且 TCPI 过高,建议暂扣部分结算款或要求承包商提供履约保函。
实战案例: 某市政道路工程结算审核中,截至审核时点,BAC=5000万元,EV=3000万元,AC=3500万元。计算得 CPI=0.857,EAC=5000/0.857≈5833万元,TCPI=(5000-3000)/(5000-3500)=2000/1500≈1.33。审计方判定为高风险,要求承包商提供后续成本控制方案,并暂扣5%结算款作为风险抵押金。
4.5 接口调用示例:EAC 与 TCPI 计算函数
在 API 集成开发中,EAC 与 TCPI 的计算通常封装为独立的服务函数。以下为 Python 示例代码,可直接集成到结算审核系统的后端服务中:
def calculate_eac(bac, ev, ac, method='typical'):
"""
计算完工估算(EAC)
:param bac: 完工预算
:param ev: 挣值
:param ac: 实际成本
:param method: 'typical'(典型偏差), 'atypical'(非典型偏差), 'composite'(综合偏差)
:return: EAC 值
"""
if method == 'atypical':
return ac + (bac - ev)
elif method == 'typical':
cpi = ev / ac if ac != 0 else 1
return bac / cpi if cpi != 0 else float('inf')
elif method == 'composite':
cpi = ev / ac if ac != 0 else 1
spi = ev / pv if pv != 0 else 1 # pv 需作为参数传入
return ac + (bac - ev) / (cpi * spi) if (cpi * spi) != 0 else float('inf')
else:
raise ValueError("Invalid method. Use 'typical', 'atypical', or 'composite'.")
def calculate_tcpi(bac, ev, ac, target='bac'):
"""
计算完工尚需绩效指数(TCPI)
:param bac: 完工预算
:param ev: 挣值
:param ac: 实际成本
:param target: 'bac'(基于原预算)或 'eac'(基于调整后估算)
:return: TCPI 值
"""
remaining_work = bac - ev
if target == 'bac':
remaining_funds = bac - ac
else:
eac = calculate_eac(bac, ev, ac)
remaining_funds = eac - ac
return remaining_work / remaining_funds if remaining_funds != 0 else float('inf')
上述代码中,calculate_eac 函数支持三种算法切换,calculate_tcpi 函数支持基于 BAC 或 EAC 两种口径。在结算审核系统中,可通过 RESTful API 暴露这些函数,供前端审核界面调用。
4.6 结算审核中的常见误区与避坑指南
| 误区 | 错误表现 | 正确做法 |
|---|---|---|
| EAC 算法选择不当 | 无论偏差性质如何,一律使用 BAC/CPI | 根据偏差原因选择算法,非典型偏差使用 EAC=AC+(BAC-EV) |
| TCPI 口径混淆 | 使用基于 EAC 的 TCPI 替代基于 BAC 的 TCPI,低估风险 | 结算审核中优先使用基于 BAC 的 TCPI,除非合同已明确调整目标 |
| 忽略数据时效性 | 使用过期的 EV/AC 数据计算预测指标 | 确保数据截止时点为最新审核基准日 |
| 未联动分析 | 单独看 EAC 或 TCPI,未结合两者判断 | EAC 超支且 TCPI>1.1 时,必须启动专项审计 |
审核工具建议: 建议在结算审核系统中内置 EAC/TCPI 计算模块,并设置自动预警阈值(如 TCPI>1.1 时自动标红)。同时,保留算法选择记录,便于后续审计追溯。