INTENT

一句话交给模型

prompt
PLAN

模型拆成几件事

readdraftcheck
ACT

到各个系统里动手

ledgercrmbank
RETURN

结果交回员工定

hand backdecide
采纳退回

底层重塑模型方能入局

把生产经营拆成数据矩阵 再重组模块构建体系

扫清障碍
让系统和生产力重生

每一个动作 都落在一套标准口径上

智能体与员工
站在同一层底座上

模型的每一步 都在企业的视线与边界之内

ONTOLOGY ACTIONS POLICY TRACE MODEL + PEOPLE
ONTOLOGY

一张图

钱 事 人 画在同一张图上

ACTIONS

一双手

让智能成为系统的幕后基建

POLICY

一道边界

越界即停 权责分明

TRACE

一本账

每一步 可溯源 且不可篡改

边界写进代码

1// 档位是数据里的行 加一档只加一行
2import type { Request, Role, Routed, Signed, Signer, Tier, Trail } from "./types";
3import { CONTRACT_HIGH, CONTRACT_MID, TIER_HIGH, TIER_MID } from "./tiers";
4
5export const TIERS: Readonly<Record<string, readonly Tier[]>> = {
6 purchase: [
7 { id: "R-05", v: 2, above: 0, inclusive: false, chain: ["dept_head"] },
8 { id: "R-06", v: 4, above: TIER_MID, inclusive: false,
9 chain: ["dept_head", "finance"] },
10 { id: "R-07", v: 3, above: TIER_HIGH, inclusive: false,
11 chain: ["dept_head", "finance", "gm"] },
12 ],
13 contract_change: [
14 { id: "R-21", v: 1, above: 0, inclusive: false, chain: ["sales_head"] },
15 { id: "R-22", v: 1, above: CONTRACT_MID, inclusive: false,
16 chain: ["sales_head", "finance"] },
17 { id: "R-23", v: 1, above: CONTRACT_HIGH, inclusive: false,
18 chain: ["sales_head", "finance", "gm"] },
19 ],
20};
21const passes = (t: Tier, amount: number) =>
22 (t.inclusive ? amount >= t.above : amount > t.above); // 分界线是一列数据
23
24export function route(req: Request, tiers: typeof TIERS, trail: Trail,
25 now: () => string): Routed {
26 if (!Number.isInteger(req.amount) || req.amount <= 0)
27 return { ok: false, reason: "invalid_amount", ref: req.id };
28 // 取金额越过的最高一档; 没有匹配的行就不出路由
29 const tier = (tiers[req.kind] ?? []).filter((t) => passes(t, req.amount))
30 .reduce<Tier | undefined>((top, t) => (top && top.above > t.above ? top : t),
31 undefined);
32 if (!tier) return { ok: false, reason: "no_tier", ref: req.id };
33 const rule = `${tier.id} · v${tier.v}`;
34 trail.append({ at: now(), ref: req.id, rule, chain: tier.chain }); // 命中记一笔
35 return { ok: true, chain: tier.chain, rule }; // 每个签字位都留在链上
36}
37
38// 建任务: 人挑出的几张单, 逐张查出该走哪一档; 只查不记(留痕由批的那一步写)
39const QUIET: Trail = { append: () => undefined };
40export const checklist = (reqs: readonly Request[], tiers: typeof TIERS) =>
41 reqs.map((r) => ({ ref: r.id, routed: route(r, tiers, QUIET, () => "") }));
42
43// 签字位由持该角色的人签, 提交人本人不能签。
44export function canSign(req: Request, slot: Role, signer: Signer): Signed {
45 if (signer.id === req.by) return { ok: false, reason: "self_sign" };
46 if (signer.role !== slot) return { ok: false, reason: "wrong_role" };
47 return { ok: true };
48}
49
50// 批完一位轮到链上的下一位; 链走完是 null(流程结束)
51export const nextSlot = (chain: readonly Role[], signed: number): Role | null =>
52 chain[signed] ?? null;
code-scenes/scene-1-approval-routing/route.tsLn 1 · UTF-8
左边是可操作的经营界面 右边是对应的代码文件
在电脑上打开可操作

重筑基建 为智能铺路

试用工作台

联系我们

企业人员规模(人)

试用工作台