timarai-dashboard-mcp 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,231 @@
1
+ export const DASHBOARD_ROUTE_PREFIX = "/api/v2/platform/dashboard/";
2
+ export const ENDPOINTS = [
3
+ {
4
+ id: "filters",
5
+ path: "filters",
6
+ cabin: "common",
7
+ kind: "filters",
8
+ summary: "查询三舱可用筛选项(业务线 / 商户 / 渠道 / 币种 / 账户类型)",
9
+ input: "filters",
10
+ },
11
+ // ---- CEO 舱 ----
12
+ {
13
+ id: "ceo.overview",
14
+ path: "ceo/overview",
15
+ cabin: "ceo",
16
+ kind: "overview",
17
+ summary: "CEO 经营总览:GMV、成功交易笔数、平台收入、毛利、活跃/新增商户、成功率、AUM",
18
+ input: "query",
19
+ },
20
+ {
21
+ id: "ceo.trend",
22
+ path: "ceo/trend",
23
+ cabin: "ceo",
24
+ kind: "trend",
25
+ summary: "CEO 关键指标趋势(默认 GMV 按日)",
26
+ input: "query",
27
+ },
28
+ {
29
+ id: "ceo.business-breakdown",
30
+ path: "ceo/business-breakdown",
31
+ cabin: "ceo",
32
+ kind: "breakdown",
33
+ summary: "CEO 业务维度分解(各业务线 GMV 与占比)",
34
+ input: "query",
35
+ },
36
+ {
37
+ id: "ceo.top-merchants",
38
+ path: "ceo/top-merchants",
39
+ cabin: "ceo",
40
+ kind: "top",
41
+ summary: "CEO GMV TOP 商户排行",
42
+ input: "query",
43
+ },
44
+ // ---- 运营舱 ----
45
+ {
46
+ id: "operation.overview",
47
+ path: "operation/overview",
48
+ cabin: "operation",
49
+ kind: "overview",
50
+ summary: "运营总览:订单总数、成功/失败/异常/处理中/退款订单数、成功率、平均处理耗时(秒)",
51
+ input: "query",
52
+ },
53
+ {
54
+ id: "operation.platform-metrics",
55
+ path: "operation/platform-metrics",
56
+ cabin: "operation",
57
+ kind: "metrics",
58
+ summary: "运营平台指标宽表:商户增长/激活/活跃/沉默/流失、VA 与 U 卡账户、渠道活跃与异常等 21 项",
59
+ input: "query",
60
+ },
61
+ {
62
+ id: "operation.order-trend",
63
+ path: "operation/order-trend",
64
+ cabin: "operation",
65
+ kind: "trend",
66
+ summary: "运营订单趋势(按日订单量与金额)",
67
+ input: "query",
68
+ },
69
+ {
70
+ id: "operation.success-rate-trend",
71
+ path: "operation/success-rate-trend",
72
+ cabin: "operation",
73
+ kind: "trend",
74
+ summary: "运营成功率趋势(按日)",
75
+ input: "query",
76
+ },
77
+ {
78
+ id: "operation.exception-trend",
79
+ path: "operation/exception-trend",
80
+ cabin: "operation",
81
+ kind: "trend",
82
+ summary: "运营异常订单趋势(按日)",
83
+ input: "query",
84
+ },
85
+ {
86
+ id: "operation.business-analysis",
87
+ path: "operation/business-analysis",
88
+ cabin: "operation",
89
+ kind: "breakdown",
90
+ summary: "运营业务线订单与成功率分析",
91
+ input: "query",
92
+ },
93
+ {
94
+ id: "operation.channel-analysis",
95
+ path: "operation/channel-analysis",
96
+ cabin: "operation",
97
+ kind: "breakdown",
98
+ summary: "运营渠道订单、成功率与渠道成本分析",
99
+ input: "query",
100
+ },
101
+ {
102
+ id: "operation.fail-reason-breakdown",
103
+ path: "operation/fail-reason-breakdown",
104
+ cabin: "operation",
105
+ kind: "breakdown",
106
+ summary: "运营失败原因占比(按编码聚合笔数、金额、占比)",
107
+ input: "query",
108
+ },
109
+ {
110
+ id: "operation.top-exception-merchants",
111
+ path: "operation/top-exception-merchants",
112
+ cabin: "operation",
113
+ kind: "top",
114
+ summary: "运营 TOP 异常商户排行",
115
+ input: "query",
116
+ },
117
+ // ---- 财务舱 ----
118
+ {
119
+ id: "finance.overview",
120
+ path: "finance/overview",
121
+ cabin: "finance",
122
+ kind: "overview",
123
+ summary: "财务资金总览:总资产、资金流入/流出、待结算、待对账、对账异常、冻结资金、可用余额",
124
+ input: "query",
125
+ },
126
+ {
127
+ id: "finance.fund-trend",
128
+ path: "finance/fund-trend",
129
+ cabin: "finance",
130
+ kind: "trend",
131
+ summary: "财务资金流趋势(按日流入/流出)",
132
+ input: "query",
133
+ },
134
+ {
135
+ id: "finance.balance-trend",
136
+ path: "finance/balance-trend",
137
+ cabin: "finance",
138
+ kind: "trend",
139
+ summary: "财务账户余额趋势(按日)",
140
+ input: "query",
141
+ },
142
+ {
143
+ id: "finance.settlement-trend",
144
+ path: "finance/settlement-trend",
145
+ cabin: "finance",
146
+ kind: "trend",
147
+ summary: "财务结算趋势(按日)",
148
+ input: "query",
149
+ },
150
+ {
151
+ id: "finance.fund-distribution",
152
+ path: "finance/fund-distribution",
153
+ cabin: "finance",
154
+ kind: "breakdown",
155
+ summary: "财务业务资金分布",
156
+ input: "query",
157
+ },
158
+ {
159
+ id: "finance.balance-distribution",
160
+ path: "finance/balance-distribution",
161
+ cabin: "finance",
162
+ kind: "breakdown",
163
+ summary: "财务账户资金分布",
164
+ input: "query",
165
+ },
166
+ {
167
+ id: "finance.reconciliation-analysis",
168
+ path: "finance/reconciliation-analysis",
169
+ cabin: "finance",
170
+ kind: "breakdown",
171
+ summary: "财务对账结果分析(按对账状态聚合金额与占比)",
172
+ input: "query",
173
+ },
174
+ {
175
+ id: "finance.top-merchant-balances",
176
+ path: "finance/top-merchant-balances",
177
+ cabin: "finance",
178
+ kind: "top",
179
+ summary: "财务 TOP 商户余额排行",
180
+ input: "query",
181
+ },
182
+ {
183
+ id: "finance.top-reconciliation-merchants",
184
+ path: "finance/top-reconciliation-merchants",
185
+ cabin: "finance",
186
+ kind: "top",
187
+ summary: "财务 TOP 对账异常商户排行",
188
+ input: "query",
189
+ },
190
+ ];
191
+ const BY_ID = new Map(ENDPOINTS.map((e) => [e.id, e]));
192
+ const BY_PATH = new Map(ENDPOINTS.map((e) => [e.path, e]));
193
+ export function getEndpointById(id) {
194
+ return BY_ID.get(id);
195
+ }
196
+ export function getEndpointByPath(path) {
197
+ return BY_PATH.get(path.replace(/^\/+/, "").replace(/\/+$/, ""));
198
+ }
199
+ /** 工具 subject → endpoint id 映射。 */
200
+ export const SUBJECT_MAP = {
201
+ overview: {
202
+ ceo: "ceo.overview",
203
+ operation: "operation.overview",
204
+ finance: "finance.overview",
205
+ },
206
+ trend: {
207
+ gmv: "ceo.trend",
208
+ order: "operation.order-trend",
209
+ success_rate: "operation.success-rate-trend",
210
+ exception: "operation.exception-trend",
211
+ fund: "finance.fund-trend",
212
+ balance: "finance.balance-trend",
213
+ settlement: "finance.settlement-trend",
214
+ },
215
+ breakdown: {
216
+ business: "ceo.business-breakdown",
217
+ business_analysis: "operation.business-analysis",
218
+ channel: "operation.channel-analysis",
219
+ fail_reason: "operation.fail-reason-breakdown",
220
+ fund_distribution: "finance.fund-distribution",
221
+ balance_distribution: "finance.balance-distribution",
222
+ reconciliation: "finance.reconciliation-analysis",
223
+ },
224
+ top: {
225
+ gmv: "ceo.top-merchants",
226
+ exception: "operation.top-exception-merchants",
227
+ balance: "finance.top-merchant-balances",
228
+ reconciliation: "finance.top-reconciliation-merchants",
229
+ },
230
+ };
231
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * 报告 HTML 组装(单文件、自包含、可打印)。
3
+ *
4
+ * 三条硬要求:
5
+ * 1. **单文件**——图表以 SVG 内联,不引任何 CDN,断网也能打开,转发不丢样式;
6
+ * 2. **可打印**——A4 分页、图表不跨页断裂,Ctrl+P 直接出 PDF;
7
+ * 3. **必须声明数据新鲜度**——`isFinal=false` 时顶部挂红条。未封板的数据被当成
8
+ * 对外口径报出去,是经营报告最贵的那类错误。
9
+ */
10
+ import { esc } from "../charts/format.js";
11
+ const CSS = `
12
+ :root{--ink:#2C2C2A;--muted:#5F5E5A;--line:#E6E4DC;--bg:#FAFAF8;--warn:#A32D2D;--warnbg:#FCEBEB}
13
+ *{box-sizing:border-box}
14
+ body{margin:0;padding:32px;background:var(--bg);color:var(--ink);
15
+ font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC','Microsoft YaHei',sans-serif;
16
+ font-size:14px;line-height:1.7}
17
+ header h1{margin:0 0 6px;font-size:22px;font-weight:500}
18
+ header .sub{color:var(--muted);font-size:13px}
19
+ .meta{margin:14px 0 0;padding:10px 14px;border:1px solid var(--line);border-radius:8px;
20
+ background:#fff;color:var(--muted);font-size:12px}
21
+ .warn{margin:12px 0 0;padding:10px 14px;border-radius:8px;background:var(--warnbg);
22
+ border:1px solid #F09595;color:var(--warn);font-size:13px}
23
+ section{margin-top:28px;break-inside:avoid}
24
+ section h2{margin:0 0 12px;font-size:16px;font-weight:500;padding-left:10px;border-left:3px solid #378ADD}
25
+ .chart{background:#fff;border:1px solid var(--line);border-radius:10px;padding:8px;margin-bottom:14px;
26
+ break-inside:avoid}
27
+ .chart svg{display:block;max-width:100%;height:auto}
28
+ .note{color:var(--muted);font-size:12px;padding:2px 8px 8px}
29
+ .narrative{background:#fff;border:1px solid var(--line);border-radius:10px;padding:18px 20px}
30
+ .narrative p{margin:0 0 10px}
31
+ .narrative p:last-child{margin-bottom:0}
32
+ footer{margin-top:32px;padding-top:14px;border-top:1px solid var(--line);color:var(--muted);font-size:12px}
33
+ @media print{
34
+ @page{size:A4;margin:14mm}
35
+ body{padding:0;background:#fff;font-size:12px}
36
+ section{page-break-inside:avoid}
37
+ .chart{page-break-inside:avoid}
38
+ }
39
+ `;
40
+ export function buildReportHtml(input) {
41
+ const parts = [`<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8">`];
42
+ parts.push(`<meta name="viewport" content="width=device-width,initial-scale=1">`);
43
+ parts.push(`<title>${esc(input.title)}</title><style>${CSS}</style></head><body>`);
44
+ parts.push(`<header><h1>${esc(input.title)}</h1>`);
45
+ if (input.subtitle)
46
+ parts.push(`<div class="sub">${esc(input.subtitle)}</div>`);
47
+ parts.push(`</header>`);
48
+ if (input.metaLine)
49
+ parts.push(`<div class="meta">${esc(input.metaLine)}</div>`);
50
+ if (input.warnUnfinal) {
51
+ parts.push(`<div class="warn">⚠️ 本报告的统计数据<strong>尚未封板</strong>(isFinal=false),` +
52
+ `后续 Finalize 可能修正数值。对外披露或出正式财报前请重新确认。</div>`);
53
+ }
54
+ if (input.narrative?.length) {
55
+ parts.push(`<section><h2>结论</h2><div class="narrative">`);
56
+ for (const p of input.narrative)
57
+ parts.push(`<p>${esc(p)}</p>`);
58
+ parts.push(`</div></section>`);
59
+ }
60
+ for (const block of input.blocks) {
61
+ parts.push(`<section>`);
62
+ if (block.heading)
63
+ parts.push(`<h2>${esc(block.heading)}</h2>`);
64
+ if (block.svg)
65
+ parts.push(`<div class="chart">${block.svg}</div>`);
66
+ if (block.note)
67
+ parts.push(`<div class="note">${esc(block.note)}</div>`);
68
+ parts.push(`</section>`);
69
+ }
70
+ if (input.footer)
71
+ parts.push(`<footer>${esc(input.footer)}</footer>`);
72
+ parts.push(`</body></html>`);
73
+ return parts.join("");
74
+ }
75
+ /** 生成报告尾部固定声明——口径纪律要跟着产物走,不能只在文档里写。 */
76
+ export function reportFooter(chartCount, requestIds) {
77
+ const ids = requestIds.length > 0 ? ` | requestId:${requestIds.slice(0, 3).join(", ")}${requestIds.length > 3 ? " 等" : ""}` : "";
78
+ return [
79
+ `共 ${chartCount} 张图表,数据均来自平台驾驶舱只读接口。`,
80
+ `金额未收敛到单一币种时不可跨币种相加;GMV 为成功订单金额口径,退款单独统计、不冲减。`,
81
+ `生成时间:${new Date().toLocaleString("zh-CN", { timeZone: "Asia/Shanghai" })}${ids}`,
82
+ ].join(" | ");
83
+ }
84
+ //# sourceMappingURL=html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/reports/html.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ export const REPORT_TEMPLATES = [
2
+ {
3
+ id: "cockpit-full",
4
+ title: "平台驾驶舱全量快照",
5
+ description: "三舱 KPI + 全部图表的一页式快照,最接近需求文档里的页面形态。",
6
+ defaultPreset: "last_7d",
7
+ charts: [
8
+ "ceo.kpi",
9
+ "ceo.gmv_trend",
10
+ "ceo.revenue_trend",
11
+ "ceo.profit_trend",
12
+ "ceo.aum_trend",
13
+ "ceo.business_gmv",
14
+ "ceo.business_revenue",
15
+ "ceo.business_profit",
16
+ "ceo.business_share",
17
+ "ceo.top_merchants",
18
+ "ops.kpi",
19
+ "ops.order_trend",
20
+ "ops.success_rate_trend",
21
+ "ops.exception_trend",
22
+ "ops.business_orders",
23
+ "ops.business_success_rate",
24
+ "ops.channel_orders",
25
+ "ops.channel_success_rate",
26
+ "ops.fail_reason",
27
+ "ops.top_exception_merchants",
28
+ "ops.merchant_growth",
29
+ "fin.kpi",
30
+ "fin.fund_trend",
31
+ "fin.balance_trend",
32
+ "fin.settlement_trend",
33
+ "fin.settlement_combo",
34
+ "fin.fund_distribution",
35
+ "fin.balance_distribution",
36
+ "fin.balance_share",
37
+ "fin.reconciliation",
38
+ "fin.top_merchant_balances",
39
+ "fin.top_reconciliation_merchants",
40
+ ],
41
+ },
42
+ {
43
+ id: "daily-briefing",
44
+ title: "每日经营日报",
45
+ description: "三舱 KPI + 四条核心趋势,适合每天固定看一眼。",
46
+ defaultPreset: "yesterday",
47
+ charts: [
48
+ "ceo.kpi",
49
+ "ceo.gmv_trend",
50
+ "ops.kpi",
51
+ "ops.order_trend",
52
+ "ops.success_rate_trend",
53
+ "fin.kpi",
54
+ "fin.fund_trend",
55
+ ],
56
+ },
57
+ {
58
+ id: "ops-anomaly-triage",
59
+ title: "运营异常归因报告",
60
+ description: "异常量趋势 → 失败原因结构 → 渠道 → 集中商户,按归因顺序排列。",
61
+ cabin: "operation",
62
+ defaultPreset: "last_7d",
63
+ charts: [
64
+ "ops.kpi",
65
+ "ops.exception_trend",
66
+ "ops.fail_reason",
67
+ "ops.channel_success_rate",
68
+ "ops.business_success_rate",
69
+ "ops.top_exception_merchants",
70
+ ],
71
+ },
72
+ {
73
+ id: "finance-weekly-review",
74
+ title: "财务周度复盘",
75
+ description: "资金、余额、结算、对账四条线。",
76
+ cabin: "finance",
77
+ defaultPreset: "last_7d",
78
+ charts: [
79
+ "fin.kpi",
80
+ "fin.fund_trend",
81
+ "fin.balance_trend",
82
+ "fin.settlement_trend",
83
+ "fin.fund_distribution",
84
+ "fin.reconciliation",
85
+ "fin.top_merchant_balances",
86
+ "fin.top_reconciliation_merchants",
87
+ ],
88
+ },
89
+ {
90
+ id: "ceo-briefing",
91
+ title: "CEO 经营简报",
92
+ description: "需求《高管驾驶舱》全部 8 KPI + 9 图的经营简报。",
93
+ cabin: "ceo",
94
+ defaultPreset: "last_30d",
95
+ charts: [
96
+ "ceo.kpi",
97
+ "ceo.gmv_trend",
98
+ "ceo.revenue_trend",
99
+ "ceo.profit_trend",
100
+ "ceo.aum_trend",
101
+ "ceo.business_gmv",
102
+ "ceo.business_revenue",
103
+ "ceo.business_profit",
104
+ "ceo.business_share",
105
+ "ceo.top_merchants",
106
+ ],
107
+ },
108
+ ];
109
+ const BY_ID = new Map(REPORT_TEMPLATES.map((t) => [t.id, t]));
110
+ export function getReportTemplate(id) {
111
+ return BY_ID.get(id);
112
+ }
113
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/reports/templates.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAC,MAAM,gBAAgB,GAA8B;IACzD;QACE,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,oCAAoC;QACjD,aAAa,EAAE,SAAS;QACxB,MAAM,EAAE;YACN,SAAS;YACT,eAAe;YACf,mBAAmB;YACnB,kBAAkB;YAClB,eAAe;YACf,kBAAkB;YAClB,sBAAsB;YACtB,qBAAqB;YACrB,oBAAoB;YACpB,mBAAmB;YACnB,SAAS;YACT,iBAAiB;YACjB,wBAAwB;YACxB,qBAAqB;YACrB,qBAAqB;YACrB,2BAA2B;YAC3B,oBAAoB;YACpB,0BAA0B;YAC1B,iBAAiB;YACjB,6BAA6B;YAC7B,qBAAqB;YACrB,SAAS;YACT,gBAAgB;YAChB,mBAAmB;YACnB,sBAAsB;YACtB,sBAAsB;YACtB,uBAAuB;YACvB,0BAA0B;YAC1B,mBAAmB;YACnB,oBAAoB;YACpB,2BAA2B;YAC3B,kCAAkC;SACnC;KACF;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,4BAA4B;QACzC,aAAa,EAAE,WAAW;QAC1B,MAAM,EAAE;YACN,SAAS;YACT,eAAe;YACf,SAAS;YACT,iBAAiB;YACjB,wBAAwB;YACxB,SAAS;YACT,gBAAgB;SACjB;KACF;IACD;QACE,EAAE,EAAE,oBAAoB;QACxB,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,qCAAqC;QAClD,KAAK,EAAE,WAAW;QAClB,aAAa,EAAE,SAAS;QACxB,MAAM,EAAE;YACN,SAAS;YACT,qBAAqB;YACrB,iBAAiB;YACjB,0BAA0B;YAC1B,2BAA2B;YAC3B,6BAA6B;SAC9B;KACF;IACD;QACE,EAAE,EAAE,uBAAuB;QAC3B,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,iBAAiB;QAC9B,KAAK,EAAE,SAAS;QAChB,aAAa,EAAE,SAAS;QACxB,MAAM,EAAE;YACN,SAAS;YACT,gBAAgB;YAChB,mBAAmB;YACnB,sBAAsB;YACtB,uBAAuB;YACvB,oBAAoB;YACpB,2BAA2B;YAC3B,kCAAkC;SACnC;KACF;IACD;QACE,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,+BAA+B;QAC5C,KAAK,EAAE,KAAK;QACZ,aAAa,EAAE,UAAU;QACzB,MAAM,EAAE;YACN,SAAS;YACT,eAAe;YACf,mBAAmB;YACnB,kBAAkB;YAClB,eAAe;YACf,kBAAkB;YAClB,sBAAsB;YACtB,qBAAqB;YACrB,oBAAoB;YACpB,mBAAmB;SACpB;KACF;CACO,CAAC;AAEX,MAAM,KAAK,GAAG,IAAI,GAAG,CAAyB,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtF,MAAM,UAAU,iBAAiB,CAAC,EAAU;IAC1C,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACvB,CAAC"}