You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效实现按财年拆分合同金额及附加费的收入预测?

高效实现财年合同收入拆分方案

步骤1:批量生成财年区间

先统一定义财年规则(以7月1日至次年6月30日为例,可根据实际财年起始日调整),批量生成FY16到FY32的区间列表,彻底告别手动逐个定义:

library(dplyr)
library(lubridate)
library(purrr)
library(tidyr)

# 定义需要覆盖的财年编号(FY16到FY32)
fy_years <- 16:32

# 批量生成财年时间区间并命名
fy_intervals <- map(fy_years, function(fy) {
  start_year <- 2000 + fy - 1
  end_year <- 2000 + fy
  interval(ymd(paste(start_year, "07", "01", sep = "-")),
           ymd(paste(end_year, "06", "30", sep = "-")))
}) %>% set_names(paste0("FY", fy_years))

步骤2:标准化合同日期数据

先把所有合同的日期统一为start_date和end_date格式(如果只有时长字段,先转换为结束日期):

# 假设原始合同数据框为contracts,包含字段:contract_id, amounts, surcharge_amount, start_date, duration_days/end_date
contracts <- contracts %>%
  mutate(
    # 若只有时长,计算合同结束日期
    end_date = if_else(is.na(end_date), start_date + days(duration_days), end_date),
    # 统一日期格式
    start_date = ymd(start_date),
    end_date = ymd(end_date),
    # 计算合同总存续天数
    total_days = as.duration(interval(start_date, end_date)) / ddays(1)
  )

步骤3:自动拆分合同到对应财年

通过笛卡尔积配对合同与财年,自动计算交集天数、占比及拆分金额,无需重复写每个财年的逻辑:

contract_fy_split <- contracts %>%
  rowwise() %>%
  # 将单个合同与所有财年区间配对
  mutate(fy_mapping = list(enframe(fy_intervals, name = "fy", value = "fy_interval"))) %>%
  unnest(fy_mapping) %>%
  # 计算合同区间与财年区间的交集
  mutate(
    contract_interval = interval(start_date, end_date),
    overlap_interval = intersect(contract_interval, fy_interval),
    # 计算交集天数(无交集则为0)
    overlap_days = if_else(is.na(overlap_interval), 0, as.duration(overlap_interval)/ddays(1)),
    # 拆分合同金额到对应财年
    fy_revenue = amounts * (overlap_days / total_days),
    # 按相同规则拆分附加费(可根据实际附加费规则调整)
    fy_surcharge = surcharge_amount * (overlap_days / total_days)
  ) %>%
  # 过滤掉无交集的财年记录
  filter(overlap_days > 0) %>%
  # 保留核心字段
  select(contract_id, fy, amounts, total_days, overlap_days, fy_revenue, fy_surcharge)

步骤4:按财年汇总(可选)

如果需要统计各财年的总营收与附加费:

fy_summary <- contract_fy_split %>%
  group_by(fy) %>%
  summarise(
    total_revenue = sum(fy_revenue),
    total_surcharge = sum(fy_surcharge),
    .groups = "drop"
  )

核心优势

  • 财年区间批量生成,新增财年只需调整fy_years向量,无需修改核心逻辑
  • 全自动化完成合同与财年的交集计算,彻底避免复制粘贴的重复劳动
  • 规则统一,推广到不同区域时仅需调整财年起始/结束日期的定义即可适配

内容的提问来源于stack exchange,提问作者darth_chaos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 16:04:53