Skip to content

[P1] cel-stdlib: missing daysBetween / date arithmetic / dateFormat — formula fields un-writable #1302

@xuyushun441-sys

Description

@xuyushun441-sys

来源:docs/PLATFORM_GAPS_FROM_TEMPLATES.md 第 7 条(P1)。

现象

CEL(公式 / formula 字段、flow 条件、过滤器宏)的函数库不完整,公式经常写不出来:

  • ❌ 无 daysBetween(date1, date2)
  • ❌ 无 date + N / date - N(整数天加减)
  • ❌ 无 dateOnly() / dateTrunc('week')
  • ❌ 无 iif(cond, a, b)(仅有 cond ? a : b 但与 macro 系统冲突)
  • ⚠️ today() / now() 时区不一致
  • ⚠️ 字符串:缺 trim / padStart / format

复现

helpdesk 模板想算 sla_remaining_minutes = (resolution_due_at - now()) / 60,CEL 报无法对 datetime 做减法。
contracts 模板想算 days_to_renewal = daysBetween(today(), renewal_date) —— 函数不存在。
procurement 想做 created_at + 7 days —— 不能。

当前 workaround

  • 改成在 flow 里写脚本节点算好,再 update_record 回填到普通字段(失去 derived 字段优势)
  • 接受字段近似(仅显示日期差的「天数粒度估算」)

建议范围

M1:日期 / 时间函数补全

  • daysBetween(a, b)hoursBetweenminutesBetween
  • addDays(date, n) / addHours / addMinutes
  • dateTrunc(date, 'day' | 'week' | 'month')
  • dateFormat(date, pattern, locale?)
  • isWeekend(date)isBusinessDay(date, calendarId?)

M2:时区一致性

  • 所有 datetime 函数明确支持 tz 参数,默认从 tenant / user setting 取
  • today() 在不同入口(formula / flow / macro)行为统一

M3:字符串 + 数字 + 数组

  • 字符串:trimpadStartreplacesplitjoinupperlower
  • 数字:round(n, decimals)clamp
  • 数组:sum / avg / min / max / any / all / count

M4:文档 + IDE 提示

  • 集中页 docs/cel-reference.md
  • spec 可声明 formulaContext: {...} 让编辑器能补全

验收

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestpriority:p1High: required for production / M2

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions