diff --git a/自营业务/库存周转视图设计.md b/自营业务/库存周转视图设计.md index f018fab..0aea0eb 100644 --- a/自营业务/库存周转视图设计.md +++ b/自营业务/库存周转视图设计.md @@ -22,11 +22,11 @@ 保持 `/self-operated/inventory` 和现有菜单,页内提供「库存周转」「库存明细」两个视图。普通菜单进入默认“库存周转”,其中默认“按 SKU”;“按货主”是可选切换,不要求先选择货主,不在经营总览和销量分析恢复货主面板。 -原库存明细继续承接已确认的 10/30 天查询与经营总览严格下钻,不得被新默认页签吞掉或转换成相似的新筛选。它是现有查询能力的明确入口,不增加旧协议别名。 +四个统计页面统一最近3/7/15/30天及自定义(1~366天),均截至北京时间昨日,日期选择器禁止今日及未来。原库存明细继续承接所选时段查询与经营总览严格下钻,不得被新默认页签吞掉或转换成相似的新筛选。它是现有查询能力的明确入口,不增加旧协议别名。 仓库优先级为合法深链仓库、当前页面保留的有权限仓库、服务端返回的首个有权限仓库;不硬编码仓库编码。确定仓库后自动加载,默认截止日为北京时间昨天,计算基准为 30 天,按实物件数降序、未知末尾。无可用仓库不发经营请求。非法深链或无权仓库明确报错,不静默改查其他仓。 -新视图路由参数使用 `view=TURNOVER,groupBy=SKU|OWNER,endDate,baseWindowDays=7|15|30`,以及其合法筛选/排序和查询上下文。显式 `view=DETAIL` 或原总览严格下钻走原合同;相互冲突的参数拒绝,不混合两套筛选。重置保留仓库,恢复新视图默认条件并重新查询;刷新、查询都只读本地已发布数据,不创建采集任务。 +新视图路由参数使用 `view=TURNOVER,groupBy=SKU|OWNER,endDate,baseWindowDays=1..366`,以及其合法筛选/排序和查询上下文。显式 `view=DETAIL` 或原总览严格下钻走原合同;相互冲突的参数拒绝,不混合两套筛选。重置保留仓库,恢复新视图默认条件并重新查询;刷新、查询都只读本地已发布数据,不创建采集任务。 页签判定按以下顺序执行:总览严格下钻(`from=overview`/`drilldownFrom=DASHBOARD`)进入 DETAIL;其次采用合法显式 view;未指定 view 但有明细专属 `salesWindowDays,attention,coverageSelection,coverageBucket,bucketRuleVersion` 时进入 DETAIL;其余默认 TURNOVER。`warehouseCode,sku,customerCode,endDate` 和公共版本字段本身不决定页签。优先级不吞掉冲突:显式 TURNOVER 同时携带总览来源或明细专属条件必须报错,所有参数再按选定视图校验。 @@ -36,15 +36,15 @@ ```text 库存分析 库存周转〔默认〕 库存明细 数据采集 -仓库 [当前仓] 截止日 [昨天] 日均及消化基准 [7 / 15 / 30天] 查询 刷新 +仓库 [当前仓] 统计时间范围 [最近3 / 7 / 15 / 30天 / 自定义] 查询 刷新 按 SKU / 按货主 SKU 搜索〔仅 SKU 视图〕 关注条件 / 阈值 / 排序 销量:7日完整、15日缺2日、30日缺12日 当前库存采集:开始……完成…… ──────────────────────────────────────────────────────────────────── -实物件数 正品可售件数 近30日无出库 SKU 待评估 SKU +实物件数 正品可售件数 所选时段无出库 SKU 待评估 SKU ──────────────────────────────────────────────────────────────────── 货主实物件数 Top10(横条) 7/15/30日日均出库对比(柱图) ──────────────────────────────────────────────────────────────────── -全部 | 实物件数最多 | 近30日无出库 | 消化较慢 | 消化较快 | 待评估 +全部 | 实物件数最多 | 所选时段无出库 | 消化较慢 | 消化较快 | 待评估 SKU/商品/货主 | 实物/可售 | 7日/15日/30日出库 | 日均 | 可售天数 | 状态 ……服务端分页,20条/页…… 扩展列/统计说明 ``` @@ -55,7 +55,7 @@ SKU/商品/货主 | 实物/可售 | 7日/15日/30日出库 | 日均 | 货主 Top10 按有效全品质实物件数排序,未知货主不按零参与排名,图旁显示未能完整计算的货主数;标题必须是“实物件数”,不写“占仓面积/占仓最多”。相同件数按货主编码稳定排序。点击条目切入本仓该货主的 SKU 视图,显示可清除的货主条件,保留上下文;不足十个按实际数展示。 -日均对比使用该范围内完整的 7/15/30 天总出库分别除以 7/15/30,各柱独立判覆盖,不比较不同天数的原始累计量;无完整口径的柱留空并显示原因,不画零柱。图表用于观察平均速度,不直接生成增长率或客户等级。 +日均对比包含截至所选结束日的7/15/30天及所选N天(去重),每窗完整出库分别除以对应自然日数,各柱独立判覆盖,不比较不同天数的原始累计量;无完整口径的柱留空并显示原因,不画零柱。图表用于观察平均速度,不直接生成增长率或客户等级。 | 操作 | 承载与行为 | | --- | --- | @@ -64,7 +64,7 @@ SKU/商品/货主 | 实物/可售 | 7日/15日/30日出库 | 日均 | | 按货主切换 | 同页服务端分页汇总;切换时清除 SKU 关键字及仅适用 SKU 的排序,提示条件已调整;保留仓库、截止日、基准及有效精确货主条件 | | 点击货主 | 同页切回 SKU 列表并添加精确货主 chip;返回货主汇总恢复原页码、筛选和上下文 | | 点击 SKU | 复用当前 1120px 居中 SKU 日趋势 AppDialog,带真实货主+SKU与所选基准区间;不加抽屉或独立详情页 | -| 样本与未知原因 | 行内短说明;详细覆盖/日样本证据用现有 1040px 居中证据 AppDialog,最多 30 日;关闭取消请求 | +| 样本与未知原因 | 行内短说明;详细覆盖/日样本证据用现有 1040px 居中证据 AppDialog,最多 366 日;关闭取消请求 | | 图表完整明细 | 沿用 1040px 居中图表明细框,支持键盘等价下钻;不默认重复展示第二张表 | | 统计说明 | 同页折叠文字,集中说明三种指标、时间及未知规则;主表不重复长段说明 | @@ -74,9 +74,9 @@ SKU 列表是只读分析表,无须新增“操作”列。第一组身份列 ## 统计时间与三种指标 -所有窗口使用同一个北京时间截止日 D,默认昨天且不允许未来或未结束的今日。N 天范围为 `[D-N+1 00:00, D+1 00:00)`,N 固定取 7、15、30;不是自然周/自然月,也不复用包含今日的销量图表预设。例:截止 2026-10-12,三个起始日分别为 10-06、09-28、09-13。 +所有窗口使用同一个北京时间截止日 D,默认昨天且不允许未来或未结束的今日。N 天范围为 `[D-N+1 00:00, D+1 00:00)`,N 为所选日期数(1~366);保留7、15、30天辅助对比,非这些天数的所选窗口另行返回;不是自然周/自然月。例:截止 2026-10-12,三个起始日分别为 10-06、09-28、09-13。 -三列出库量始终同屏;`baseWindowDays` 只决定日均、可售天数、快慢查询和期间周转的计算基准,默认 30,不会偷偷把未齐的 30 天换成 7 天。每窗独立返回完整量、已采集量、完整/部分/未知日数、实际日期及原因。部分窗口显示“已采集 X,覆盖不足”,所有日均与派生判断不采用该部分量。 +三列出库量始终同屏;`baseWindowDays` 决定日均、可售天数、无出库、快慢查询和期间周转的计算基准,默认 30,不会偷偷把未齐的 30 天换成 7 天。每窗独立返回完整量、已采集量、完整/部分/未知日数、实际日期及原因。部分窗口显示“已采集 X,覆盖不足”,所有日均与派生判断不采用该部分量。 | 指标 | 计算与命名 | 资格 | | --- | --- | --- | @@ -109,13 +109,13 @@ SKU 列表是只读分析表,无须新增“操作”列。第一组身份列 ## 筛选与内部评估规则 -新视图使用独立 `focus`,不改写原 `attention`、总览分桶或 30 日严格下钻含义。观察与异常证据沿用主方案。快慢阈值是本次查询输入,按仓库保存页面偏好但不是正式仓租政策;初始不预设未经确认的 90/180 天,不因未设阈值阻止默认列表。 +新视图使用独立 `focus`,不改写原 `attention`、总览分桶或所选时段严格下钻含义。观察与异常证据沿用主方案。快慢阈值是本次查询输入,按仓库保存页面偏好但不是正式仓租政策;初始不预设未经确认的 90/180 天,不因未设阈值阻止默认列表。 | 快捷入口/focus | 规则与默认排序 | | --- | --- | | 全部 ALL | 固定版本候选全集,保留零值、售空及未知;默认实物件数降序 | | 实物件数最多 | ALL+实物降序;不得称为占用空间最大 | -| 近30日无出库 NO_OUTBOUND_30D | 有效正实物、同截止日完整 30 日出库为零及本仓观察资格;包含全冻结/次品;基准选 7 日也不改变该按钮的 30 日语义 | +| 所选时段无出库 NO_OUTBOUND_IN_WINDOW | 有效正实物、所选完整时段出库为零及本仓观察资格;包含全冻结/次品;按所选基准窗口判定 | | 消化较慢 COVERAGE_GT | 有效正品可售量和 N 日日均均为正且正式可售天数 > 查询阈值;天数降序 | | 消化较快 COVERAGE_LE | 有效正品可售量和 N 日日均均为正且正式可售天数 ≤ 查询阈值;天数升序;只是消化估算,不代表持续销售或正式高周转等级 | | 冻结/次品 FROZEN/DEFECTIVE | 对应有效数量 >0,不依赖销量完整性;这些库存可能无法按日均正常售出 | @@ -129,7 +129,7 @@ SKU 列表是只读分析表,无须新增“操作”列。第一组身份列 货主汇总是一条服务端分页聚合查询,不先获取货主选项再逐个调用 `owner-overview`。身份键为来源账号+仓库+货主;SKU 继续以货主+SKU 去重,不跨货主合并同名商品。 -每行展示货主名称/编码、有实物 SKU 数、实物/正品可售/冻结/次品件数、7/15/30 日出库、所选 N 日日均、近30日无出库 SKU 数及实物件数、慢消化命中和待评估数量;期间周转放扩展列。不平均 SKU 可售天数,也不输出“总库存÷总日均”作为货主整体可售天数。 +每行展示货主名称/编码、有实物 SKU 数、实物/正品可售/冻结/次品件数、7/15/30 日出库、所选 N 日日均、所选时段无出库 SKU 数及实物件数、慢消化命中和待评估数量;期间周转放扩展列。不平均 SKU 可售天数,也不输出“总库存÷总日均”作为货主整体可售天数。 货主历史出库和平均实物候选必须涵盖期间曾有库存或出库而当前已售空的商品;不能先筛当前正库存再算周转。货主平均实物先按每个合格日代表汇总该货主全部同口径商品,再取 N 日均值;完整时用货主同期总出库除以该平均量。它仍是混合商品的件数指标,不作为跨货主奖惩排名,不能用高销量小件掩盖积压大件。 @@ -160,9 +160,9 @@ SKU 数值表头支持实物件数、正品可售、7/15/30 日出库、所 | 数据 | 复用与约束 | | --- | --- | -| 三窗实际出库 | `ll_selfop_sku_daily_sales`,按固定销量版、仓库及最长30日读取,一次条件聚合三窗;仓级概览优先复用 `ll_selfop_warehouse_daily_sales` 及原覆盖证据 | +| 三窗实际出库 | `ll_selfop_sku_daily_sales`,按固定销量版、仓库及最长max(30,N)日读取,一次条件聚合三窗;仓级概览优先复用 `ll_selfop_warehouse_daily_sales` 及原覆盖证据 | | 当前实物/可售库存 | `ll_selfop_inventory_snapshot`+其固定 profile,同 SKU 全品质先聚合,避免与日销量多行连接后乘倍 | -| 历史平均库存 | `ll_selfop_sync_run.inventory_daily_sample_date/inventory_sample_rule_version` 对应的 snapshot、profile、范围与发布证据;最多30个不可变代表批次 | +| 历史平均库存 | `ll_selfop_sync_run.inventory_daily_sample_date/inventory_sample_rule_version` 对应的 snapshot、profile、范围与发布证据;最多366个不可变代表批次 | | 商品观察与缺日 | 固定版本 profile+销量覆盖证明+各库存代表的资格;缺行不补零,不读取可变最新档案污染旧上下文 | | 查询上下文 | 沿现有版本上下文机制扩展日代表集合;可用服务端签名令牌或既有上下文存储,但冻结字段及权限行为一致,实施前总控确定唯一方式 | @@ -172,7 +172,7 @@ SKU 数值表头支持实物件数、正品可售、7/15/30 日出库、所 所有查询读取本地已发布数据,不查原始订单明细,不调用 Integration。禁止前端逐 SKU/逐货主请求、把第一页求和当全仓汇总、先取 Top100 后筛选、为三窗执行三套完整扫描。 -候选身份是本次固定当前库存版 profile/snapshot、固定销量版所选最长30日事实及相关 profile、同期合格日代表 profile/snapshot 中货主+SKU 的并集;不读取后续可变档案。仅历史存在而当前缺行的商品保留为当前库存未知,不能补零。rows、total、summary 和图表使用同一候选定义,再分别应用各自已声明的范围与列表筛选。 +候选身份是本次固定当前库存版 profile/snapshot、固定销量版所选最长max(30,N)日事实及相关 profile、同期合格日代表 profile/snapshot 中货主+SKU 的并集;不读取后续可变档案。仅历史存在而当前缺行的商品保留为当前库存未知,不能补零。rows、total、summary 和图表使用同一候选定义,再分别应用各自已声明的范围与列表筛选。 默认实物排序且无销量/天数/周转等依赖筛选时,可先对完整候选身份分页,再补该页三窗和历史样本,不能只从当前 snapshot 选页而丢失未知/售空商品。依赖销量、可售天数、周转次数的筛选/排序必须先在完整候选计算资格,再排序分页。货主聚合与图表独立按完整范围计算;复用现有性能方案中已验证的路径,不原样重复已无收益的优化实验。 @@ -208,8 +208,10 @@ SKU 数值表头支持实物件数、正品可售、7/15/30 日出库、所 | 同仓同名SKU不同货主、两仓同货主SKU | 分行、分仓、独立窗口资格,不混合库存或借另一仓历史 | | 货主有部分未知商品 | 出库、库存及关注分别传播;保留已知小计与未知数,不用合格样本比率冒充完整风险占比 | | 切货主/筛选/分页/图表下钻 | 统计范围标签准确;列表 total 与全量谓词一致;图表不由当前页拼出;身份与上下文不丢 | -| 原经营总览无出库/最长天数/分桶跳入库存 | 进入原库存明细,保留原30日资格、严格版本及时效,不落入新近似筛选 | +| 原经营总览无出库/最长天数/分桶跳入库存 | 进入原库存明细,保留原所选时段资格、严格版本及时效,不落入新近似筛选 | | 新版发布、日样本新增、旧上下文读取 | 旧上下文结果不漂移;整体刷新才切新;过期明确要求刷新 | | 页面与性能 | 1920×1080人工核对;三窗与主库存可读;未知有原因;性能按上述真实完整样本分别报告 | -本轮评审已明确:7/15/30是完整滚动窗口;原10/30明细继续有入口;货主汇总仅在新视图可选;件数不是空间;可售天数不是库龄或期间周转;历史样本不足不造数;新视图查询不增加领星请求。待后续业务确认的是正式仓租/优惠阈值、空间数据和成本主体,均不阻断本次只读功能开发。 +本轮评审已明确:7/15/30是完整滚动窗口;四页日期统一最近3/7/15/30天及自定义,原明细继续有入口;货主汇总仅在新视图可选;件数不是空间;可售天数不是库龄或期间周转;历史样本不足不造数;新视图查询不增加领星请求。待后续业务确认的是正式仓租/优惠阈值、空间数据和成本主体,均不阻断本次只读功能开发。 + +自定义长区间的翻页上下文携带逐日样本映射的SHA-256摘要,服务端仍按固定查询时刻重建完整max(30,N)日映射(含缺失日期)后比较摘要;完整日历保留在响应中。不能仅相信客户端摘要,也不能读取当前最新样本替代原版本。 diff --git a/自营业务/经营总览图表设计.md b/自营业务/经营总览图表设计.md index 0673dae..4afb0f5 100644 --- a/自营业务/经营总览图表设计.md +++ b/自营业务/经营总览图表设计.md @@ -14,7 +14,7 @@ ```text 经营总览 查看销量 查看库存 数据采集 -仓库 [选择] 统计时间范围 [今日/近3天/本周/近15天/本月/自定义] 查询 刷新 +仓库 [选择] 统计时间范围 [最近3天/最近7天/最近15天/最近30天/自定义] 查询 刷新 销量覆盖截至…… 库存采集于…… 有新数据可刷新 / 部分资料提示 ────────────────────────────────────────────────────────────────────── 区间出库量 | 所选时段日均出库 | 实物库存 | 正品可售 | 有库存SKU | 无出库SKU @@ -26,7 +26,7 @@ 按出库件数的横向条形 按可售天数的横向条形 按实物件数的横向条形 ``` -统计时间范围默认近 15 天,支持主方案确认的五种自然周期和最多 366 天的自定义范围。该控件同时影响趋势、区间出库与日均 KPI、库存分布和三个榜单;热销按所选日期内已采集有效出库量排序,未采齐显示部分覆盖。日均与库存评估以同一所选区间的自然日数为分母,包含今日或缺失日期时不以部分销量推算。库存数量仍来自当前固定库存版本,不代表所选日期的历史库存。 +经营总览时间筛选默认近15天(截至昨日),提供最近3天、最近7天、最近15天、最近30天及最多366天的自定义范围,移除今日;快捷范围均截至北京时间昨日。最近N天为昨日往前完整N天;自定义最晚为昨日,起止日期均包含在统计内。前端将快捷范围转换为明确CUSTOM起止日期调用现有接口,复用查询上下文时以其anchorDate固定边界,整体刷新按当前北京时间重新计算;查看销量与其他下钻统一使用响应中的实际日期。该控件同时影响趋势、区间出库与日均 KPI、库存分布和三个榜单;热销按所选日期内已采集有效出库量排序,未采齐显示部分覆盖。日均与库存评估以同一所选区间的自然日数为分母,包含今日或缺失日期时不以部分销量推算。库存数量仍来自当前固定库存版本,不代表所选日期的历史库存。 KPI 采用紧凑的一行指标带;图表是主要内容,不再以整页描述表承载。复用 Admin 密度令牌,图表不套详情字段网格或普通表格行高。图表行建议趋势约 280~320px 高;榜单给 10 条保留可读高度,不强制全部首屏可见。长 SKU 可换行或省略并提供可聚焦的完整文字;名称与货主为辅助文本,不以内部 ID 回退。 @@ -41,7 +41,7 @@ KPI 采用紧凑的一行指标带;图表是主要内容,不再以整页描 | 实物库存 | 当前固定库存版各货主/SKU/品质的有效实物量;冻结、次品已经包含在实物中,不重复相加;在途不加入 | | 正品可售 | 只汇总正品有效可用数量,不再减冻结、不加在途或次品 | | 有库存 SKU | 全品质实物量已核验大于零的货主+SKU 去重数;品质行不是独立 SKU;存在库存未知时标记“已确认 N,另 M 待核验” | -| 所选时段无出库 SKU | 有实物且满足完整所选区间零出库及本仓观察资格的 SKU 数;观察不足和未知另外说明,不认定卖不掉 | +| 所选时段无出库 SKU | 有实物且满足完整所选区间零出库的 SKU 数;观察不足仅提示,库存或销量未知另外说明,不认定卖不掉 | 库存或风险总量存在依赖未知时,正式值为空,允许显示“已知小计”及未知 SKU 数;不把未知过滤后仍显示成全仓总数。单项完整性独立:库存失败不阻止完整销量图;销量不足不掩盖已核验库存。全仓可售天数、平均 SKU 可售天数、评分和“优级客户”不在指标带中。 @@ -53,6 +53,8 @@ KPI 采用紧凑的一行指标带;图表是主要内容,不再以整页描 每个日点返回正式量、已采集量、完整性和覆盖原因。缺日断线,部分日用明确的点形/虚线及“未完整”文字;不平滑跨越缺口。今日只有一个日累计点,不画小时趋势;自定义长区间减少坐标标签密度但保留全部日点和提示。整段已采集合计等于可靠日点已采集量之和;所有日点未知时合计为空。 +仓级趋势按固定已发布版本的覆盖证据判定历史日,采集滞后或待重算不将该版完整历史日统一降为未完整;待重算时明确提示展示已发布历史结果,未发布事实不混入。来源时区、数量单位、日期缺口及今日未结束的限制保留。当前库存评估仍受待重算保护;所选区间包含今日时页面直接说明完整自然日条件不满足,并提示可选择截至昨日的自定义时段,其他库存与销量可信条件仍须满足。 + 仓级零值与部分值单独判断:全天覆盖完整时,正式量=已采集量=有效日行合计,无行可为 0;只有部分已证明覆盖且无日行时,正式量为空、已采集量为 0、状态 PARTIAL;没有覆盖证明但存在已确认日行时仍保留日行合计为已采集量、状态 PARTIAL;没有覆盖证明且没有日行时,两值均为空、状态 UNKNOWN。连续水位外的已确认日行不能被丢弃,整个仓级趋势不套单 SKU 存在时间或库存观察门槛。 点击已知日点进入销量分析当日自定义范围;未知日不可伪造零数据下钻,改显示该日覆盖不足原因。鼠标提示和键盘聚焦均显示日期、件数、状态;不能仅依赖颜色解释未知。 @@ -61,16 +63,16 @@ KPI 采用紧凑的一行指标带;图表是主要内容,不再以整页描 使用横向条形图,单位为 SKU 个数,显示“有实物库存或库存待核验 SKU 的分布”。候选取固定两版 profile 的货主+SKU 并集:明确有效且实物为零的 SKU 排除;有效正实物以及实物未知/过期的候选保留。整个库存版尚不可用时显示无库存资料,不将全部销售候选画成一个伪造的库存总量。 -`bucketRuleVersion=COVERAGE_DISTRIBUTION_V1` 按以下先后顺序将每个候选只归入一个桶;上一步命中后不再落入后续桶。销量与观察资格沿用主方案,不直接将没有日行视为零出库: +`bucketRuleVersion=COVERAGE_DISTRIBUTION_V1` 按以下先后顺序将每个候选只归入一个桶;上一步命中后不再落入后续桶。销量资格沿用主方案;仅在完整可信窗口及数量单位确认后,没有出库行可记零,观察不足不单独归入 UNKNOWN: | 桶 | 判定 | | --- | --- | -| `UNKNOWN` 库存或销量待核验 | 先检查本 SKU 实物或用于可售天数的正品可售数据异常/未知/过期;命中即归此桶。后续因销量窗口或观察资格不足无法计算时也归此桶,分别统计原因 | +| `UNKNOWN` 库存或销量待核验 | 先检查本 SKU 实物或用于可售天数的正品可售数据异常/未知/过期;命中即归此桶。后续因销量窗口或数量质量不足无法计算时也归此桶,分别统计原因 | | `NO_AVAILABLE` 无可售库存 | 库存有效、实物大于零且正品可售量明确为零;可包含冻结或次品,不宣称周转良好,不依赖销量资格 | -| `NO_OUTBOUND_IN_WINDOW` 所选时段无出库 | 有效正可售量、完整所选区间及观察资格且出库为零;天数为空,不转成无限大 | +| `NO_OUTBOUND_IN_WINDOW` 所选时段无出库 | 有效正可售量、完整可信所选区间且出库为零;天数为空,不转成无限大 | | `DAYS_0_30`、`DAYS_30_60`、`DAYS_60_90`、`DAYS_GT_90` | 正可售量、正日均且资格完整,按未舍入天数分别落 `(0,30]`、`(30,60]`、`(60,90]`、`(90,+∞)` | -在无可售库存判断之后、零出库或数值分桶之前检查销量/观察资格;不足回到 UNKNOWN。展示顺序为四个数值桶、无出库、无可售、待核验,不等于执行判定顺序。可售天数=当前正品可售量×所选区间自然日数÷区间完整出库量;SKU 的最早有效观察证据须不晚于区间起点。30/60/90 仅为本版图形分组边界,不是收费、补货或优劣政策。 +在无可售库存判断之后、零出库或数值分桶之前检查销量完整性、可信状态和数量单位;不足回到 UNKNOWN。展示顺序为四个数值桶、无出库、无可售、待核验,不等于执行判定顺序。可售天数=当前正品可售量×所选区间自然日数÷区间完整出库量;SKU 的最早有效观察证据单独保留为提示,不阻断上述统计。30/60/90 仅为本版图形分组边界,不是收费、补货或优劣政策。 各桶 `skuCount` 之和必须等于 `candidateSkuCount`,并同时返回已排除的确定零实物 SKU 数。图表不展示“风险率”百分比;待核验量无法被藏进已评估分母。可在提示中显示桶内已知实物小计及未知件数范围,不把件数与 SKU 个数混用。 @@ -83,10 +85,10 @@ KPI 采用紧凑的一行指标带;图表是主要内容,不再以整页描 | 图表 | 资格与排序 | 下钻 | | --- | --- | --- | | 所选时段热销 Top 10 | 按所选日期已采集有效正出库量降序、单数降序、SKU/货主编码升序;部分覆盖也展示,明确标记未完整,不将未采集当零。库存缺失或售罄不阻止进入 | 条目打开同窗口 SKU 趋势;“查看 Top 100”进入销量分析相同 CUSTOM 日期范围 | -| 预计消化时间最长 Top 10 | 有效正可售、正日均、完整窗口及观察资格;按未舍入可售天数降序,SKU/货主编码升序。零销量单列,不冒充无限天数;不等同原 slow-skus 低销量榜 | 条目打开 SKU 趋势;“查看全部”进入库存分析相同有限天数候选及天数降序 | -| 所选时段无出库库存 Top 10 | 主方案 attention=NO_OUTBOUND_IN_WINDOW:全品质有效正实物、完整窗口和观察资格、出库零;包含全冻结/次品有实物者。按实物量降序,SKU/货主编码升序 | 条目打开 SKU 趋势;“查看全部”进入库存分析无出库关注及实物量降序 | +| 预计消化时间最长 Top 10 | 有效正可售、正日均、完整可信窗口;按未舍入可售天数降序,SKU/货主编码升序。零销量单列,不冒充无限天数;不等同原 slow-skus 低销量榜 | 条目打开 SKU 趋势;“查看全部”进入库存分析相同有限天数候选及天数降序 | +| 所选时段无出库库存 Top 10 | 主方案 attention=NO_OUTBOUND_IN_WINDOW:全品质有效正实物、完整可信窗口、出库零;包含全冻结/次品有实物者。按实物量降序,SKU/货主编码升序 | 条目打开 SKU 趋势;“查看全部”进入库存分析无出库关注及实物量降序 | -排名从全仓所有已授权货主的候选先算资格/排序后截取,不先截 SKU 清单或逐货主各取十个再汇总。观察不足时返回待评估数量;榜单明确是“符合条件的 SKU”,不以没有合格候选推断库存健康。可售天数很长仍是按历史速度的估算,不标成真实库龄或一定卖不掉。 +排名从全仓所有已授权货主的候选先算资格/排序后截取,不先截 SKU 清单或逐货主各取十个再汇总。库存或销量数据实际不足时返回待评估数量,观察不足本身不增加待评估数;榜单明确是“符合条件的 SKU”,不以没有合格候选推断库存健康。可售天数很长仍是按历史速度的估算,不标成真实库龄或一定卖不掉。 ## 图表交互与视觉依据 @@ -121,7 +123,7 @@ KPI 采用紧凑的一行指标带;图表是主要内容,不再以整页描 | `coverageDistribution` | bucketRuleVersion、candidateSkuCount、excludedZeroPhysicalSkuCount、各 bucketCode/skuCount、可选已知实物小计/未知数、dataStatus/reasonCodes;分组未知原因有摘要 | | `hotSkus`/`longCoverageSkus`/`noOutboundSkus` | 各自实际窗口(windowStartDate/windowEndDateExclusive/calculationWindowDays)、eligibleCount、unassessableCount、items(最多 10)、dataStatus/reasonCodes;每项包含实际 customerCode+sku、名称、主指标及其单位/必要辅助值,窗口出库字段为windowOutboundQuantity。热销部分覆盖返回PARTIAL与SALES_WINDOW_INCOMPLETE,不返回该部分量推算的日均和消化天数。单点弹框复用原 daily API,不因图形新增另一份销量公式 | -计数无法确定时用空值和原因,不能把未计算的 eligibleCount/unassessableCount 默认为零。冻结、次品、在途可作为必要辅助数量,不新增会被误加总的库存占比饼图。所有经营数量的已知小计/完整总量遵守主方案;日均销售不依赖 SKU 的库存观察期,风险分类则依赖。 +计数无法确定时用空值和原因,不能把未计算的 eligibleCount/unassessableCount 默认为零。冻结、次品、在途可作为必要辅助数量,不新增会被误加总的库存占比饼图。所有经营数量的已知小计/完整总量遵守主方案;日均销售和本页库存分类均不以 SKU 观察期作为阻断条件,观察状态单独提示。 ### 精确下钻合同 @@ -153,14 +155,14 @@ KPI 采用紧凑的一行指标带;图表是主要内容,不再以整页描 | 用例 | 必须得到的结果 | | --- | --- | -| 近 15 天含今日,另选今日/本周/本月/CUSTOM | 趋势轴、区间出库、日均、分布和三个榜单均随选择变化;含今日或缺日时保留待评估,不填零;今日单点无小时数据 | +| 近15天截至昨日,切换最近3/7/15/30天/CUSTOM | 无今日选项,自定义禁选今日及未来;趋势、KPI、分布和榜单使用同一实际区间,缺日保留待评估;下钻与返回日期一致 | | 日量 2、未知、5,今日部分 1 | 可靠值合计 8 标已采集,正式总量为空;缺日断线,今日部分;全未知合计为空,不为 0 | | 同仓 SKU X 属货主 A 出库 2、B 出库 5,均有效 | 全仓对应日为 7;榜单与点击身份保留两条,下钻分别为 2/5 | | 库存缺失但所选区间完整销量数据存在 | 日均、趋势、热销可用,依赖库存的图形显示未就绪,不让库存失败清空销售 | | A 正可售 3000、30 日出库 300;B 正可售 30、出库 30 | A 可售 300、B 30,分别归 >90 和 (0,30],最长榜 A 在前;不按低销量将 B 当更积压 | | 候选 5 个:有效正可售零出库、全冻结且零出库、库存未知、有效天数 30、有效天数 30.04;再有明确零实物 1 个 | 分别落无出库/无可售/待核验/(0,30]/(30,60];桶合计 5、排除数 1;冻结 SKU 仍能进入独立无出库库存榜 | | 正品实物 120 含冻结 20,可售 100;次品实物 8,在途 30 | 实物 128、可售 100,不相加为 278;图中不出现这几个重叠量的库存组成饼图 | -| 整体存在未知库存或观察不足;热销和无出库候选不足 10 个 | 标已知小计和待评估,不补齐榜单、不宣称整体无风险;完全无可靠资料不显示健康零值 | +| 整体存在未知库存或销量缺口;热销和无出库候选不足 10 个 | 标已知小计和待评估,不补齐榜单、不宣称整体无风险;完全无可靠资料不显示健康零值 | | 90、90.04 天显示均可能接近 90;零出库的天数为空 | 比较与分桶按未舍入值,分别≤90/>90;零出库不进最长有限天数榜、不放成无限值 | | 每个分桶点击、榜单跳转、单条趋势,随后返回;另测 200 个热销候选 | 库存分桶/最长/无出库的 total 等于对应完整候选数;热销 total=min(eligibleCount,100),200 个候选时为 100,前 10 一致。身份/版本不变,复用 1120px 趋势弹框,返回保留范围及滚动位置 | | 图表加载途中切仓、后台发布新版、跨午夜或上下文过期 | 旧仓响应不覆盖新仓;不单图切版或自动滚动今天;到期明确刷新,库存过期不继续显示当前有效 | diff --git a/自营业务/领星一件代发数据统计一期方案.md b/自营业务/领星一件代发数据统计一期方案.md index 0c7448d..f9a5402 100644 --- a/自营业务/领星一件代发数据统计一期方案.md +++ b/自营业务/领星一件代发数据统计一期方案.md @@ -660,7 +660,7 @@ SKU 每日出库销量 1. 先选仓库,再选上述范围;默认激活“今日”是界面设计默认值。可按货主、SKU 筛选;来源账号+货主+仓库+SKU 构成一条商品记录,同名 SKU 不跨货主合并。 2. SKU 列表展示货主、SKU、商品名称、单位、所选日期范围、区间出库量及数据状态。候选来自固定销量版和库存版的 SKU profile 并集,不能只列有出库商品而漏掉有库存零销量商品;未查询到的陌生 SKU 返回明确无记录。列表保留覆盖不足/待观察条目,不把它们默认为零销量。 3. 点击一条 SKU,展示其每日出库趋势和区间累计;横轴为业务日期,纵轴为出库件数或已核准的数量单位,提示中显示日期、数量、完整性与覆盖截止。若选中范围只有一个日期点,正常显示单点和累计卡片。 -4. 列表与图表在完整范围内显示正式出库量;范围包含今日或缺失日时,显示“已采集出库量”及未完整提示。默认按该展示数量降序排列,空值排末,数量相同按 SKU 编码、货主编码升序;这只是当前范围的 SKU 清单排序,不冒充正式热销或滞销榜。 +4. 列表与图表在完整范围内显示正式出库量;范围包含今日或缺失日时,显示“已采集出库量”及未完整提示。默认按该展示数量降序排列,表头支持升降序切换(`salesSort=QUANTITY_ASC/QUANTITY_DESC`),由服务端在分页前排序,空值始终排末,数量相同按 SKU 编码、货主编码升序;这只是当前范围的 SKU 清单排序,不冒充正式热销或滞销榜。 5. 图表必须保留整个所选日期轴。可靠零值显示 0;未知日期留空/断线,不连成平滑曲线掩盖缺口。部分日使用区别样式和文字“未完整”,不只依赖颜色。没有任何可靠值时显示未覆盖提示,不能显示一条全零线。 6. 标注所选仓库、业务时区、销量完整覆盖截至时间、最近成功发布时间及修订待核对状态;若同时展示库存,另外标注实际库存采集区间。每天 08:00、20:00 更新销量,因此“今日”是已采集累计,不是实时值。 @@ -713,15 +713,18 @@ SKU 每日出库销量 分母包含真实零销量日,不只除以发生销售的天数。日均值保留足够精度,最终天数显示一位小数;计算中间值不提前取整。 +库存明细及经营总览共用的窗口统计,将实际出库与商品观察期分开:本仓完整、可信的已发布销量覆盖及有效件数单位确认后,按固定版本中该货主、SKU 的实际窗口出库计算;完整窗口内没有出库行可记零,不能将未采齐、未发布、单位异常或缺少覆盖证明的窗口补零。商品最早可靠记录晚于窗口开始或尚无更早记录时,`observationEligible=false` 和观察不足原因仅作为独立提示,不再清空窗口出库、日均或可售天数,也不单独归入待评估。该规则不将观察不足解释为真实库龄或新品滞销,滞销 Top 100 的独立观察资格不变。 + | 条件 | 输出 | | --- | --- | | 可售量 300 件,近 30 天出库 150 件 | 日均 5 件,可售 60.0 天 | | 有可售库存,完整窗口销量为零 | 天数为空,显示“近 30 天无出库”,不输出无限大或随意上限 | | 明确可售量为零 | 天数 0,标记“无可售库存”;销售窗口是否完整仍单独显示 | | 库存未知、异常或已过期 | 天数为空,说明数据原因;历史观测值可单独查看 | -| 可售量大于零,但销量覆盖不足或 SKU 观察不足 | 不输出正式 30 天可售天数,显示覆盖天数与待观察状态 | +| 可售量大于零,但销量覆盖不足 | 不输出正式窗口可售天数,显示覆盖不足原因 | +| 完整可信窗口且数量有效,但商品历史观察不足 | 正常显示窗口出库及日均;结合有效可售库存计算天数,另行提示观察不足 | -判定顺序固定为:先检查库存 `UNKNOWN/INVALID/STALE`,不满足可信条件时天数为空;库存有效且明确为零时返回 `0`,同时独立暴露销量覆盖与观察状态;只有有效正库存才继续检查销量窗口、SKU 观察期及分母是否为零。不能因为数值字段恰为零,就绕过库存异常或过期检查。 +判定顺序固定为:先检查库存 `UNKNOWN/INVALID/STALE`,不满足可信条件时天数为空;库存有效且明确为零时返回 `0`,同时独立暴露销量覆盖与观察状态;只有有效正库存才继续检查销量窗口、数量单位及分母是否为零。观察期不足仅提示,不阻断完整窗口统计。不能因为数值字段恰为零,就绕过库存异常或过期检查。 这是一项按历史出库速度估算的覆盖天数,不是需求预测。促销、季节性、断货期间损失的需求、采购交期均未建模;已在途库存不加进本期可售量。 @@ -740,7 +743,7 @@ SKU 每日出库销量 实物量为同 SKU 全部已核验品质的 `physical_quantity` 之和;冻结量按各品质 `frozen_quantity` 独立汇总,是实物中的受限数量,不再加到实物总量;次品实物也是实物的一部分。可售量只取正品 `available_quantity`;在途单列,不视为当前占仓。未知品质可保留来源实物,但不推断它是正品或次品。任何数量缺失或异常均按其指标依赖传播,不能把一个数值有效误当该 SKU 所有指标均有效。实物件数仅表示数量,不表示立方米、托盘或库位占用。 -关注条件使用下列明确语义;所需库存必须有效且不过期,销售资格沿用所选完整窗口及本仓观察依据(经营总览及严格下钻的窗口以[经营总览图表设计](经营总览图表设计.md)为准)。标签可并存,不将冻结/次品与其他标签的命中数简单相加: +关注条件使用下列明确语义;所需库存必须有效且不过期,销售资格沿用所选完整可信窗口及有效数量单位(经营总览及严格下钻的窗口以[经营总览图表设计](经营总览图表设计.md)为准)。标签可并存,不将冻结/次品与其他标签的命中数简单相加: | `attention` | 判定及输出 | | --- | --- | @@ -748,13 +751,13 @@ SKU 每日出库销量 | `NO_OUTBOUND_IN_WINDOW` | 全品质实物量大于零、所选窗口出库资格完整且数量为零;冻结/次品即使正品可售为零也可命中。标签是“有实物库存且所选时段无出库”,不是实际库龄或从未售出 | | `COVERAGE_GT_THRESHOLD` | 正品可售量和日均出库均大于零、正式可售天数严格大于 `coverageDaysThreshold`;使用未四舍五入的计算值比较。阈值是用户本次查询输入的正整数天,不内置未确认的 90/180 天经营政策 | | `FROZEN_STOCK`/`DEFECTIVE_STOCK` | 对应有效冻结件数/次品实物量大于零;不依赖销量窗口,单独提示受限或次品占仓 | -| `UNASSESSABLE` | 影响基本出库/可售天数判断的库存异常、过期、销量覆盖不足或观察不足;零销量且数据完整属于“无出库”,不是待观察 | +| `UNASSESSABLE` | 影响基本出库/可售天数判断的库存异常、过期、销量覆盖不足等实际数据问题;观察不足仅作提示,零销量且数据完整属于“无出库” | 有库存零出库时可售天数仍为空,不当作无穷大,也不混入“超过阈值”的数值排序;零库存返回零天不代表货主优质。`NO_OUTBOUND_IN_WINDOW` 和 `COVERAGE_GT_THRESHOLD` 是不同关注集合,前者不可因分母为零被遗漏。现有 slow Top 100 仍限定正品可售库存大于零,不用它替代上述全品质实物关注。 货主概览的总量来自完整候选集,不能加总当前页或 Top 100。每个指标分别返回正式总量、已知有效小计及未知数量:同一指标任一候选依赖未知,正式总量为空,已知小计明确标为部分资料;完全无可靠行时小计也为空。统计中明确的零值不算未知。库存候选/缺行资格沿用固定 profile 与完整库存快照,数据范围未发布不能输出空集零总量。 -货主 30 天出库总量以该货主在固定日版本中的有效出库及完整仓级销售覆盖判断;单个 SKU 尚无足够库存观察期,仅影响该 SKU 的风险判断,不能据此抹掉已经完整采集的货主出库总量。货主日均等于完整 30 天总出库量除以 30,不平均各 SKU 日均。若销量窗口不完整,正式总量/日均为空,仍可列该窗口已采集出库小计;不能将缺日按零补齐。SKU 种类数按货主+SKU 去重,不把多个品质计为多个 SKU。 +货主 30 天出库总量以该货主在固定日版本中的有效出库及完整仓级销售覆盖判断;单个 SKU 尚无足够库存观察期,不阻断库存明细及总览的实际出库、日均及可售天数,观察状态另行提示。货主日均等于完整 30 天总出库量除以 30,不平均各 SKU 日均。若销量窗口不完整,正式总量/日均为空,仍可列该窗口已采集出库小计;不能将缺日按零补齐。SKU 种类数按货主+SKU 去重,不把多个品质计为多个 SKU。 无出库和超过阈值分别展示命中 SKU 数、命中 SKU 的全品质实物件数及其占本货主实物总件数的比例。该占比仅描述“命中 SKU 的实物件数占比”,不是空间占比或真实库龄占比;超过阈值的判定用正品可售天数,计数对象仍为 SKU。分子和分母使用同一版本、货主和全品质实物口径。存在库存未知、正库存商品判断未知或范围不完整时,正式命中量及比例为空,只列“已确认命中小计+待判断 SKU 数/可知的待判断实物量”;不能只在合格样本中算出看似完整的低风险比例。分母为零时比例为空并显示无实物库存。未输入阈值时“超过阈值”指标为空并提示未设置查询阈值;不影响其他概览值。 @@ -885,6 +888,8 @@ SKU 每日出库销量 查询响应至少包含销量业务日期范围、销量覆盖截至时间、库存观测区间、统计版本、数据质量状态和异常原因;异常条目返回空数值与原因,不能返回看似有效的零。只读明细优先展示真实 SKU、仓库编码和出库单号,缺少业务编号时显示“—”。 +库存明细的全品质实物、正品可售、全品质冻结、次品实物、在途、窗口出库、日均出库和可售天数支持表头升降序,与筛选区排序共用服务端规则:对完整筛选结果排序后分页,未知值始终末尾,同值按 SKU、货主稳定排序。出库及日均按所选窗口的正式值排序,不用部分采集小计代替;切换排序保留已查询版本并回到第一页,失败恢复上次成功排序及页码。`observedWindowOutboundQuantity` 返回同一版本、同一日期窗口内已确认单位的出库小计;窗口未采齐时展示“已采集”及具体原因,不用部分小计推算完整窗口日均及可售天数;商品观察不足不阻断完整窗口统计,仅单独提示。列表明确展示北京时间统计区间:普通库存明细默认截至昨天,排除未结束的今天;库存数量仍取当前查询的库存观测版本。发布新数据后提供显式“更新数据”入口取得新版本,总览下钻仍返回总览刷新原图。 + 经营查询参数统一要求 `sourceAccount`、`warehouseCode`,列表可选 `customerCode`、`sku`。首次查询固定该仓 `salesRunId`、`inventoryRunId` 及各自的 `salesScopeHash`、`inventoryScopeHash`,取得版本后生成服务端基准时刻 `queryAsOf`,一起返回。后续同屏列表翻页、SKU 图表、榜单和库存查询携带同一版本上下文,过期或范围不符时明确拒绝,不静默切换;只有显式刷新或切换仓库才重新取得版本。某一族尚无已发布版本时上下文明确标记该族不可用,后续不能偷偷补入新版本;库存不可用时销量仍可按已有版本展示。运行概览及任务接口采用当前持久状态,不受图表版本上下文限制,不能复用经营查询的全量 load。 查询上下文的设计有效期为 30 分钟,响应返回 `queryExpiresAt`;后续请求超过期限时明确提示刷新整页,不能只给其中一个组件偷偷换版。版本本身另有可查询期限,`queryExpiresAt` 不得晚于所选任一版本的可查询截止;固定统计版本与临时查询上下文不是历史日期保留期限。 @@ -904,7 +909,7 @@ SKU 观察依据与候选资格也只取这两个版本的不可变快照,不 | daily 唯一商品 | `customerCode,sku` 必填并精确匹配固定候选;缺失不能合并同名 SKU,候选不存在则返回明确无记录。返回商品身份、区间汇总及每天一点的 `points` | | 数值与状态 | 汇总和每个 point 包含 `outboundQuantity,observedQuantity,dataStatus,reasonCodes,quantityUnit`;point 另含 `businessDate` 和当日已证明覆盖的起止(无覆盖可空),汇总含 `completeDayCount,partialDayCount,unknownDayCount`。区间总量必须与同一 SKU daily 的日点按上述规则相加一致 | | 覆盖与时效 | 返回 `salesCoveredFrom,salesCoveredUntil`、完整自然日范围、销量发布时间、修订待核对状态,以及可用时的库存观测起止;批次完整状态与查询范围完整性分字段,不能互相代替 | -| 其他指标的窗口 | `hot-skus` 独立入口使用 `windowDays=7/30`,总览下钻的 CUSTOM 日期合同见[经营总览图表设计](经营总览图表设计.md);`slow-skus` 仍使用截至查询基准昨日的30日。普通 `inventory-coverage` 使用 salesWindowDays=10/30(默认30)及含当日的 salesWindowEndDate(默认查询基准昨日且须早于查询当日),返回实际起止和 calculationWindowDays;总览严格下钻改用原图CUSTOM区间,禁止混用两组日期参数,详见同一设计入口 | +| 其他指标的窗口 | 四个统计页面统一最近3/7/15/30天与自定义,全部不含今日。`hot-skus`、`slow-skus` 页面均传CUSTOM起止日期,总览下钻的CUSTOM日期合同见[经营总览图表设计](经营总览图表设计.md)。普通 `inventory-coverage` 使用 salesWindowDays=1..366(默认30)及含当日的 salesWindowEndDate(默认查询基准昨日且须早于查询当日),返回实际起止和 calculationWindowDays;总览严格下钻改用原图CUSTOM区间,禁止混用两组日期参数,详见同一设计入口 | 调用示例为 `GET .../sku-sales-summary?sourceAccount=demo&warehouseCode=WH-DEMO&rangePreset=THIS_MONTH¤t=1&size=20`,账号和仓库仅为占位值。首屏解析本月范围后,选择一条货主/SKU 调用 daily,传相同范围与返回的版本上下文即可得到日趋势。任何范围切换都不触发 Integration 调用,不创建新的领星统计接口;不要把本地预设名、日期范围或业务时区直接透传给外部产品库存接口。 @@ -1068,7 +1073,7 @@ Integration 仅提供 `/internal/integrations/lingxing/...` 内部查询,沿 | 同仓同货主 A 库存 3,000、30 日出库 300;B 库存 30、出库 30,均正品有效且观察完整,查询阈值 90 | 日均分别 10/1,可售 300/30 天;超阈值只命中 A。命中 SKU 实物 3,000、货主实物 3,030,占比 3,000÷3,030;不能按出库量小优先认定 B 更积压 | 合成 SQL/DTO 数值及排序测试 | | 全仓热销榜前 100 无货主 B,但 B 有 3 个有销量 SKU;库存列表多页 | 筛 B 后热销候选仍有 3 个;B 概览与 B 的全量结果一致,不随页码改变,不从全仓前 100 或当前页二次筛选 | 过滤顺序、跨页与概览一致性测试 | | 正品实物 120(冻结 20)、次品实物 8、可售 100、在途 30 | SKU/货主实物为 128、可售 100;冻结不叠加,次品不重复相加,在途不算占仓;品质连接不能复制销量。另测全冻结正品可售为零仍显示实物和冻结关注 | 品质聚合及受限库存测试 | -| 有实物库存且完整 30 日零出库;另一个正库存 SKU 观察不足,第三个库存未知 | 前者 NO_OUTBOUND_IN_WINDOW、天数为空,不冒充超过阈值;后两者保留待判断。风险正式数量/占比为空,已确认命中小计仍展示;库存完整且销量覆盖完整时,仅观察不足不使货主实际出库总量变空 | 零分母、资格与未知传播测试 | +| 有实物库存且完整 30 日零出库;另一个正库存 SKU 观察不足,第三个库存未知 | 前者 NO_OUTBOUND_IN_WINDOW、天数为空,不冒充超过阈值;仅观察不足者按完整窗口实际销量评估,未知库存者保留待判断。库存或销量存在实际缺口时总量/占比为空,已确认小计仍展示 | 零分母、资格与未知传播测试 | | 无阈值、阈值 0/负数、实际可售 90.04 天显示 90.0 天且阈值 90 | 未设置不计算超阈值指标;非法值拒绝;90.04 按未舍入值命中。没有任何实物库存时占比为空,不给优秀评级 | 入参、精度及无库存测试 | | 同日计划库存先失败后成功,再有一次成功;另测并发发布和发布后恢复 | 选择同日第一次成功发布 run 为日代表,同日后续不覆盖;账号/仓/日唯一,失败及 VALIDATION 无日标记,恢复不重复标记 | 发布事务、幂等与唯一键测试 | | 昨日计划跨午夜扫描或今日补跑;另测今日与昨日数量完全相同 | 不回填昨日或冒充今日正常日样本;数量相同仍保留真实今日观测。缺口留空不沿用旧值;日代表 run/snapshot/profile 不受销量版 7 天清理规则影响 | 时区边界、缺口和保留合同测试 | @@ -1157,7 +1162,7 @@ Integration 仅提供 `/internal/integrations/lingxing/...` 内部查询,沿 | 查询速度与容量 | 完成代表性数据、无业务缓存、10 并发及后台构建期间的性能验收,记录执行计划、P95/P99、扫描量和磁盘增长;30 分钟上下文与旧销量版保留/引用保护通过测试。本文目标未实测,不能按建索引或只读 API 联调成功直接判定通过 | | 业务发布与交付 | 离线合同、分段归并屏障、版本冻结、幂等、故障恢复、客户身份拒绝访问及真实落库对账全部通过;交付批次、时段、每仓版本和未决项。联调 HTTP 成功、源码测试通过、部署和业务验收分别记录 | -上述来源验证可以与编码并行推进,但真实账号始终遵守环境独占和整轮验证预算;没有通过的正式启用门槛保持关闭或明确显示待核验,不把缺口折算成零销量、零库存或完整榜单。两个月目标实际完整采集后可以覆盖近 30 天日期窗口,纯库存零出库 SKU 仍可能需要积累观察期;测试样本和仅配置目标范围均不能代替正式覆盖。 +上述来源验证可以与编码并行推进,但真实账号始终遵守环境独占和整轮验证预算;没有通过的正式启用门槛保持关闭或明确显示待核验,不把缺口折算成零销量、零库存或完整榜单。两个月目标实际完整采集后可以覆盖近 30 天日期窗口,纯库存零出库 SKU 的观察期仅作库存明细与总览提示,滞销榜仍须积累独立观察期;测试样本和仅配置目标范围均不能代替正式覆盖。 并行开发时,建议本对话继续维护这份主方案与联调手册,另一个后端开发对话负责 Integration、Lastleg、SQL 基线文件、OpenAPI 和离线验收,避免同时改写主文档。可以先实现完整后端链路与合成数据测试;真实销量覆盖和正式榜单发布保留启用门槛。当前两个时区字段直接配置已确认的 `Asia/Shanghai`,不得使用仓库所在地时区二次转换;自动调用速率不得把本轮低频成功当作配额确认。未授权时不执行 SQL、不部署、不启用真实定时任务;这不影响先完成代码。