| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- /* taxonomy.js —— 阶段、层、优先级、证据强度的枚举与展示规则。
- * 需求变化时只需要动这里;页面其余部分都从这里读标签与排序。 */
- (function () {
- "use strict";
- /* 五个阶段。stage 字段无论存 "S1品类分析" 还是 "1"/"S1",都归一到这里 */
- const STAGES = [
- { code: "S1", no: 1, name: "品类市场分析", label: "S1 品类市场分析" },
- { code: "S2", no: 2, name: "用户需求与痛点", label: "S2 用户需求与痛点" },
- { code: "S3", no: 3, name: "机会点识别", label: "S3 机会点识别" },
- { code: "S4", no: 4, name: "机会验证评估", label: "S4 机会验证评估" },
- { code: "S5", no: 5, name: "场景与卖点设计", label: "S5 场景与卖点设计" }
- ];
- /* 四层。同一库,靠 layer 字段区分 */
- const LAYERS = [
- { key: "raw", label: "原材料", en: "raw", desc: "调研整理的事实,必须带出处" },
- { key: "process", label: "过程", en: "process", desc: "学员与分身产生的成果,观点,质量参差" },
- { key: "sediment", label: "沉淀", en: "sediment", desc: "归纳后够格回灌的见解,已校准" },
- { key: "record", label: "记录", en: "record", desc: "不合格/纯推测/重复的,只留档不进知识" }
- ];
- const PRIORITIES = ["S", "A", "B"];
- /* 证据强度:verified 必须有真实原文;没有原文的成果在页面上会显示"证据未对齐" */
- const EVIDENCE = [
- { key: "verified", label: "有原文", rank: 3 },
- { key: "supported", label: "有佐证", rank: 2 },
- { key: "speculative", label: "模型推测", rank: 1 },
- { key: "none", label: "无证据", rank: 0 }
- ];
- const STATUS = {
- active: "进行中",
- submitted: "已提交",
- draft: "草稿",
- parked: "已搁置"
- };
- /* 机会卡:池子里的生命周期。状态只认这三种,其余历史值归为 candidate 并在 UI 标出 */
- const OPP_STATUS = [
- { key: "candidate", label: "候选", desc: "在池子里,等待评分与决策" },
- { key: "approved", label: "已立项", desc: "已拍板进入下一步,进入研发储备" },
- { key: "rejected", label: "已否决", desc: "留档,不进储备;理由必须写" }
- ];
- const OPP_STATUS_KEYS = OPP_STATUS.map((s) => s.key);
- /* 决策类型:卡片底部那行「决策:…」 */
- const DECISIONS = {
- concept: "进入概念验证",
- approve: "立项",
- reject: "否决",
- hold: "暂缓",
- merge: "并入其他机会"
- };
- /* 上传方式:客户要看「哪个 Agent 用什么方式上传的」 */
- const UPLOAD_METHODS = {
- session: "会话上传",
- skill: "Skill 上传",
- manual: "手工录入"
- };
- /* 证据强度(机会卡自己的三档,与成果的 evidences 不是一套:卡上回答"这个判断站不站得住") */
- const OPP_EVIDENCE = [
- { key: "high", label: "高", rank: 3 },
- { key: "medium", label: "中", rank: 2 },
- { key: "low", label: "低", rank: 1 },
- { key: "none", label: "待补", rank: 0 }
- ];
- /* 成果类型:只做展示名,不做业务定义 */
- const ARTIFACT_TYPES = {
- opportunity_card: "机会卡",
- pain_list: "痛点清单",
- competitor_report: "竞品报告",
- voc_report: "VOC 报告",
- concept: "概念提案"
- };
- const SOURCE_TYPES = {
- category: "品类",
- competitor: "竞品",
- process: "工艺",
- audience: "人群",
- opportunity: "机会",
- probe: "探针"
- };
- function stageOf(value) {
- if (value == null || value === "") return null;
- const s = String(value).toUpperCase();
- return STAGES.find((x) => s.startsWith(x.code)) || null;
- }
- const stageLabel = (v) => (stageOf(v) ? stageOf(v).label : v || "—");
- const layerOf = (key) => LAYERS.find((l) => l.key === key) || null;
- function evidenceOf(level, hasQuotes) {
- if (level === "verified" && hasQuotes) return EVIDENCE[0];
- if (level === "verified" || level === "supported") return EVIDENCE[1];
- if (level === "speculative") return EVIDENCE[2];
- return EVIDENCE[3];
- }
- window.KF_TAXONOMY = {
- STAGES, LAYERS, PRIORITIES, EVIDENCE, STATUS, ARTIFACT_TYPES, SOURCE_TYPES,
- OPP_STATUS, OPP_STATUS_KEYS, DECISIONS, UPLOAD_METHODS, OPP_EVIDENCE,
- oppStatusOf: (k) => OPP_STATUS.find((s) => s.key === k) || null,
- oppEvidenceOf: (k) => OPP_EVIDENCE.find((e) => e.key === k) || OPP_EVIDENCE[3],
- stageOf, stageLabel, layerOf, evidenceOf
- };
- })();
|