function count(value) { const number = Number(value) return Number.isFinite(number) ? number : NaN } export async function run(context) { const module = 'self-operated-analytics' const base = '/api/platform/v1/last-leg/self-operated-analytics' const dashboardResponse = await context.request('GET', `${base}/dashboard`) if (dashboardResponse.http === 200 && String(dashboardResponse.body?.code) === '200') { const dashboard = context.apiSuccess(module, '查询自营经营看板', dashboardResponse) context.assert(module, '经营看板六项指标与趋势结构完整', dashboardResponse, dashboard && typeof dashboard === 'object' && (dashboard.metrics == null || Array.isArray(dashboard.metrics)) && (dashboard.trend == null || Array.isArray(dashboard.trend)), `keys=${Object.keys(dashboard || {}).length}`) } else { context.addCoverageGap(module, 'self-operated-analytics', '经营看板', `需要本轮采集账号与仓库上下文;当前空参请求 HTTP=${dashboardResponse.http}, code=${dashboardResponse.body?.code ?? 'missing'}`, 'not-implemented', { blocking: false }) } const ownersResponse = await context.request('GET', `${base}/owners?page=1&size=20`) if (ownersResponse.http === 200 && String(ownersResponse.body?.code) === '200') { const owners = context.apiSuccess(module, '查询自营货主目录', ownersResponse) context.assert(module, '货主目录分页字段完整', ownersResponse, owners && Array.isArray(owners.records) && Number.isFinite(count(owners.total)), `total=${owners?.total ?? 'missing'}`) } else { context.addCoverageGap(module, 'self-operated-analytics', '货主目录', `需要本轮采集账号上下文;HTTP=${ownersResponse.http}, code=${ownersResponse.body?.code ?? 'missing'}`, 'not-implemented', { blocking: false }) } context.addCoverageGap(module, 'self-operated-analytics', '数据采集任务与重试', '采集任务同步/重试依赖领星外部账号与真实采集批次;本模块只读核对看板与货主目录,缺账号时记录覆盖缺口', 'external-third-party', { blocking: false }) }