forked from lunanting/cangku
- 期初数量改由本地快照表 daily_inventory_snapshot 提供(上一业务日期末), 每日 01:30 定时任务落库,接口侧缺失时补写兜底,逐日自动滚动 - 新增 dailyInventorySnapshotDb / dailyInventorySnapshotJob 与手动补跑脚本 - dailyInventoryBaseline 瘦身为纯仓库映射,去掉所有硬编码业务数值 - 12 个流水列因业务库缺单据表返回空值,前端灰底显示「—」 - 修复 qty 全为 0 的仓库期末显示 null 的缺陷 - 新增 docs/库存流水单据表需求.md 给 DBA
77 lines
7.1 KiB
JavaScript
77 lines
7.1 KiB
JavaScript
/**
|
||
* 每日进销存 —— 列定义
|
||
*
|
||
* 表头取自桌面《库存监控.xlsx》,顺序与表格一致。
|
||
* source 标记该列数据来源,便于在页面上如实标注口径:
|
||
* - snapshot:来自项目本地快照表 daily_inventory_snapshot(每日定时落库,自动滚动)
|
||
* - runtime:运行时从业务库实时取数
|
||
* - unavailable:业务库缺少对应单据表,暂无法计算(渲染为「—」)
|
||
*/
|
||
|
||
export const COLUMN_SOURCE = {
|
||
snapshot: 'snapshot',
|
||
runtime: 'runtime',
|
||
unavailable: 'unavailable',
|
||
};
|
||
|
||
const NO_SOURCE_TIP = '业务库 JSReportReplica 缺少该单据表,无法还原,待 DBA 补充后自动接入(详见 docs/库存流水单据表需求.md)';
|
||
|
||
/** 表格存在两个名为「期初」的列,第二个加后缀区分 */
|
||
export const DAILY_INVENTORY_COLUMNS = [
|
||
{ key: 'warehouse', label: '仓库', source: 'snapshot', tip: '取自主数据表 rpt.jst_warehouseInfo 的仓库名,表格显示为「XX主仓」' },
|
||
{ key: 'openingQty', label: '期初数量', source: 'snapshot', tip: '上一业务日的期末结存,取自本地快照表 daily_inventory_snapshot(每日 01:30 自动落库)' },
|
||
{ key: 'processIn', label: '加工进仓', source: 'unavailable', tip: `加工进仓。${NO_SOURCE_TIP}` },
|
||
{ key: 'purchaseReturn', label: '采购退货', source: 'unavailable', tip: `采购退货。业务库 jst_purchaseout 有单据但数值与聚水潭进销存口径不一致,暂不展示` },
|
||
{ key: 'purchaseIn', label: '采购进仓', source: 'unavailable', tip: `采购进仓。业务库 jst_purchase 按日汇总与进销存口径不一致(崔桥 9-23 基准 1295,库内仅数百),暂不展示` },
|
||
{ key: 'otherIn', label: '其它进仓', source: 'unavailable', tip: `其它进仓。${NO_SOURCE_TIP}` },
|
||
{ key: 'otherReturn', label: '其它退货', source: 'unavailable', tip: `其它退货。${NO_SOURCE_TIP}` },
|
||
{ key: 'salesOut', label: '销售出仓', source: 'unavailable', tip: `销售出仓。业务库订单表任何日期字段都还原不出日度出库量(崔桥 9-23 基准 4273,send_date 仅 1769),暂不展示` },
|
||
{ key: 'stocktaking', label: '盘点', source: 'unavailable', tip: `盘点。${NO_SOURCE_TIP}` },
|
||
{ key: 'processOut', label: '加工出仓', source: 'unavailable', tip: `加工出仓。${NO_SOURCE_TIP}` },
|
||
{ key: 'transferOut', label: '调拨出', source: 'unavailable', tip: `调拨出。${NO_SOURCE_TIP}` },
|
||
{ key: 'salesReturn', label: '销售退货', source: 'unavailable', tip: `销售退货。业务库 jst_returnAndRefundInfo 数值与进销存口径不一致,暂不展示` },
|
||
{ key: 'transferIn', label: '调拨入', source: 'unavailable', tip: `调拨入。${NO_SOURCE_TIP}` },
|
||
{ key: 'openingQtyExtra', label: '期初(2)', source: 'unavailable', tip: '聚水潭导出表中的第二个「期初」列,业务库无对应来源' },
|
||
{ key: 'otherOut', label: '其它出库', source: 'unavailable', tip: `其它出库。${NO_SOURCE_TIP}` },
|
||
{ key: 'closingQty', label: '期末数量', source: 'runtime', tip: '聚水潭实时库存 rpt.jst_inventoryInfo,按仓库 wms_co_id 单仓统计(存货数量不为 0 的 SKU 汇总)' },
|
||
{ key: 'turnoverDays', label: '库存周转天数', source: 'runtime', tip: '月度发货总件数 / 月度日均库存件数 × 100%。月度发货总件数=近 30 天已发货订单件数(jst_OrderItem×jst_Orders,按 send_date,排除 Delete/Cancelled);月度日均库存件数=该仓实时库存(无历史结存表,以当日库存近似)' },
|
||
{ key: 'warnLevel', label: '滞销预警级库存量', source: 'runtime', tip: 'SKU 级:库龄 < 3 个月 且 周转率 30%~199% 的库存合计' },
|
||
{ key: 'slowLevel', label: '商品慢流级库存量', source: 'runtime', tip: 'SKU 级:库龄 < 3 个月且周转率 ≥ 200%,或库龄 > 3 个月且周转率 30%~99% 的库存合计' },
|
||
{ key: 'staleLevel', label: '商品呆滞级库存量', source: 'runtime', tip: 'SKU 级:库龄 3~12 个月且周转率 ≥ 100%,或库龄 > 12 个月且周转率 100%~199% 的库存合计' },
|
||
{ key: 'zombieLevel', label: '商品僵尸级库存量', source: 'runtime', tip: 'SKU 级:库龄 > 12 个月 且 周转率 ≥ 200% 的库存合计' },
|
||
];
|
||
|
||
/** 口径说明弹框文案 */
|
||
export const FORMULA_DESCRIPTION = [
|
||
'数据来源说明(全部来自数据库,无人工填数):',
|
||
'· 期初数量:项目本地快照表 daily_inventory_snapshot 中「上一业务日」的期末结存。',
|
||
' 业务库 JSReportReplica 没有按天的历史库存结存表,因此由本系统每天 01:30 把 26 仓实时库存落一份快照,',
|
||
' 今日期初 = 昨日快照,逐日自动滚动。',
|
||
'· 12 个流水列(加工进仓 / 采购退货 / 采购进仓 / 其它进仓 / 其它退货 / 销售出仓 / 盘点 / 加工出仓 / 调拨出 / 销售退货 / 调拨入 / 其它出库):',
|
||
' 业务库缺少调拨 / 盘点 / 加工 / 其它出入库单据表;已有的采购与销售单据按日汇总后与聚水潭进销存口径不一致',
|
||
' (崔桥 9-23 销售出仓基准 4273,订单表 send_date 仅 1769,偏差约 60%),因此不展示估算值,',
|
||
' 已整理单据表需求给 DBA,补齐后自动接入。',
|
||
'· 期末数量:运行时取聚水潭实时库存 rpt.jst_inventoryInfo(按 wms_co_id 单仓),随刷新滚动。',
|
||
'· 库存周转天数 / 四级库存量:运行时计算,库龄基准时刻为快照日次日 01:00。',
|
||
'',
|
||
'算式:',
|
||
'· 期末数量 = 期初数量 + 加工进仓 + 采购进仓 + 其它进仓 + 其它退货 + 销售退货 + 调拨入',
|
||
' − 采购退货 − 销售出仓 − 盘点 − 加工出仓 − 调拨出 − 其它出库',
|
||
'· 库存周转天数 = 月度发货总件数 / 月度日均库存件数 × 100%',
|
||
' 月度发货总件数 = 该仓近 30 天已发货订单件数',
|
||
' (jst_OrderItem 关联 jst_Orders,按订单发货仓 wms_co_id 归属,send_date 落在窗口内,排除 Delete / Cancelled)',
|
||
' 月度日均库存件数 = 该仓聚水潭实时库存 jst_inventoryInfo 汇总',
|
||
' (业务库无按天的历史库存结存表,无法算真正的日均库存,以当日库存近似月度日均)',
|
||
' 库龄(天) = 基准时刻 − SKU 建档时间 created;3 个月按 90 天、12 个月按 365 天折算',
|
||
'· 库存分级(SKU 级,库龄 + 周转率双维度,低于 30% 的不计入任何级别):',
|
||
' 库龄 < 3 个月 且 周转率 30%~199% → 滞销预警',
|
||
' 库龄 < 3 个月 且 周转率 ≥ 200% → 商品慢流',
|
||
' 库龄 > 3 个月 且 周转率 30%~99% → 商品慢流',
|
||
' 库龄 3~12 个月 且 周转率 ≥ 100% → 商品呆滞',
|
||
' 库龄 > 12 个月 且 周转率 100%~199% → 商品呆滞',
|
||
' 库龄 > 12 个月 且 周转率 ≥ 200% → 商品僵尸',
|
||
'',
|
||
'注意:仓库整体周转率按「该仓发货总量 ÷ 该仓库存总量」计算,与四级分级的 SKU 级取舍不是同一个口径,',
|
||
' 两者不必相等(例如整体周转率 6% 的仓里,仍可以有部分 SKU 周转率超 30% 而被判为预警级)。',
|
||
];
|