首页/数据/数仓建模速查/合同维度:有效期与状态
维度与事实设计149 条

合同维度:有效期与状态

合同维承载签约主体、期限与状态:起止日期支撑有效性判断,续签是否并为一个成员取决于业务对合同连续性的要求。

数仓建模速查数据更新于 2026-10-13

合同维度是什么

合同维承载签约主体、合同期限与状态,是订单、结算、返利等事实挂靠的法律依据。起止日期支撑「在某个时点合同是否有效」的判断。续签要不要并与原合同同一个成员,取决于业务对连续性的要求:若按合同号严格管理,续签是新成员,用父合同键串联;若业务只关心合作关系的连续性,可继承原成员并顺延期限。

基本信息

主键contract_id 业务键 + contract_sk 代理键
期限字段start_date / end_date(含或不含当日需写明)
状态取值待生效 / 生效中 / 已到期 / 已终止
续签处理新成员并用 parent_contract_id 指向原合同
事实关联订单、结算、返利事实挂 contract_sk
主体变更转让或更名要记录前后主体,审计场景不可覆盖

典型使用场景

  • 有效期判断:结算时校验发生日期是否落在合同期内
  • 到期预警:提前 30/60 天提醒业务续签,避免断档
  • 返利核算:按合同约定的返点比例计费,比例随合同版本变化
  • 对账追溯:对账差异追溯到具体合同条款与签署版本
  • 合规审计:查询某个时点有效的合同清单与签约主体

有效合同与续签链查询

有效合同与续签链查询
SELECT contract_id, party_name, start_date, expire_date, status
FROM dim_contract
WHERE :asof >= start_date AND :asof < expire_date   -- 半开区间,避免到期日重复计算
  AND status <> '已终止';   -- 提前终止的合同即使未到期也排除
SELECT c1.contract_id, c2.contract_id AS renewed_as
FROM dim_contract c1
LEFT JOIN dim_contract c2 ON c2.parent_contract_id = c1.contract_id   -- 顺着续签链看合同连续性

关键字段读法

字段含义注意点
start_date合同生效日与签署日可能不同,别混用
expire_date合同到期日含或不含当日必须统一,否则多算一天
status当前状态类型 1 覆盖只反映当前,历史要有变更日志
parent_contract_id前序合同续签链的唯一可靠线索
到期日的开闭区间是合同类报表的高频错源:约定 end_date 不含当日(半开区间)可让「上一份到期日 = 下一份生效日」自然衔接,不产生空档或重叠。
提前终止的合同要保留被终止的事实与终止日期,不要直接删行或改状态为已到期:结算与审计都需要看到「原计划到期」和「实际终止」两个日期。

易错点

  • 续签合并处理不当,跨期订单找不到归属合同,返利核算出现无主金额
  • 状态列覆盖更新且无变更日志,历史时点的合同状态无法还原
  • 到期日区间开闭口径不统一,同一合同在两张报表的有效天数相差一天
  • 合同主体转让直接覆盖原主体,审计时无法证明当时是谁签的

数据来源与参考

  • 数仓建模实践:合同维度
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌