# 库存出入库流水（QueryGoodsOutboundReceipt） → goods_stock_movements 字段映射

> 生成时间：2026-02-14

## 端点信息

| 属性 | 值 |
|------|-----|
| 接口路径 | `GoodsStockManage/QueryGoodsOutboundReceipt` |
| 请求方法 | POST |
| ODS 对应表 | `ods.goods_stock_movements` |
| JSON 数据路径 | `data.queryDeliveryRecordsList` |

## 字段映射

| JSON 字段 | ODS 列名 | 类型转换 | 说明 |
|-----------|----------|----------|------|
| siteGoodsStockId | siteGoodsStockId | int→BIGINT（`parse_int`） | 门店某个“商品库存记录”的主键 ID |
| tenantId | tenantId | int→BIGINT（`parse_int`） | 租户/品牌 ID |
| siteId | siteId | int→BIGINT（`parse_int`） | 门店 ID |
| siteGoodsId | siteGoodsId | int→BIGINT（`parse_int`） | 门店维度的商品 ID |
| goodsName | goodsName | string→TEXT（原样） | 商品名称 |
| goodsCategoryId | goodsCategoryId | int→BIGINT（`parse_int`） | 商品一级分类 ID |
| goodsSecondCategoryId | goodsSecondCategoryId | int→BIGINT（`parse_int`） | 商品二级分类 ID |
| unit | unit | string→TEXT（原样） | 库存计量单位 |
| price | price | float→NUMERIC(18,4)（`parse_decimal(scale=4)`） | 商品单价（单位金额） |
| stockType | stockType | int→INT（`parse_int`） | 1：89 条 |
| changeNum | changeNum | float→NUMERIC(18,4)（`parse_decimal(scale=4)`） | 本次库存数量变化值 |
| startNum | startNum | float→NUMERIC(18,4)（`parse_decimal(scale=4)`） | 变动前（这次出入库之前）的库存数量 |
| endNum | endNum | float→NUMERIC(18,4)（`parse_decimal(scale=4)`） | 变动后（出入库之后）的库存数量 |
| changeNumA | changeNumA | float→NUMERIC(18,4)（`parse_decimal(scale=4)`） | 辅助单位的变化量（与 changeNum 对应的第二计量单位变化），当前未使用 |
| startNumA | startNumA | float→NUMERIC(18,4)（`parse_decimal(scale=4)`） | 辅助计量单位的起始库存（例如件/箱等第二单位） |
| endNumA | endNumA | float→NUMERIC(18,4)（`parse_decimal(scale=4)`） | 辅助单位的变动后库存，同样未启用 |
| remark | remark | string→TEXT（原样） | 备注信息，用于手工记录本次变更的特殊原因说明（例如“盘点差异调整”“报损”） |
| operatorName | operatorName | string→TEXT（原样） | 执行此次库存变动的操作人 |
| createTime | createTime | string→TIMESTAMP（`parse_timestamp`） | 这条库存变动记录的创建时间，即发生库存变更的时间点 |

## ETL 补充字段

| ODS 列名 | 生成逻辑 |
|-----------|----------|
| content_hash | 对业务字段（排除 ETL 元数据列）计算 SHA-256，用于变更检测与去重 |
| source_file | 固定值：`goods_stock_movements.json`，标识原始导出文件 |
| source_endpoint | API 端点路径，如 `GoodsStockManage/QueryGoodsOutboundReceipt` |
| fetched_at | ETL 入库时间戳（`TIMESTAMPTZ DEFAULT now()`） |
| payload | 完整原始 JSON 记录快照（`JSONB NOT NULL`），用于回溯与二次解析 |

## 类型转换规则

- **时间戳**：通过 `TypeParser.parse_timestamp()` 转换，支持 ISO 字符串和 Unix 毫秒时间戳，自动处理时区
- **金额**：通过 `TypeParser.parse_decimal(value, scale=2)` 转换，`ROUND_HALF_UP` 四舍五入
- **整数**：通过 `TypeParser.parse_int()` 转换，`None` 保持为 `NULL`
- **字符串**：原样保留，`None` / 空字符串均存为 `NULL` 或空文本
- **布尔值**：API 返回 `true/false`，ODS 存为 `BOOLEAN` 或 `INT`（0/1）
- **JSONB**：`siteProfile`、`payload` 等复合对象直接以 `JSONB` 类型存储
