---
name: store-order
description: 到店开单、结算、取消与退款。触发：开单/walk-in 结账/退单冲销。
---

# 订单

## 用法

```bash
uv run {baseDir}/scripts/cli.py <子命令> ...
```

## 输出格式

stdout 单行 JSON：成功 `"ok": true`；需确认 `"error": "need_confirm"`；失败含 `"error"` 码。详见 [references/errors.md](references/errors.md)。

## 主要子命令

| 子命令 | 用途 |
|--------|------|
| order-create | 开单（draft） |
| order-query | 查订单与明细 |
| order-cancel --yes | 取消未结订单 |
| order-settle --yes | 结算（支付+库存+业绩） |
| order-refund --yes | 已完成订单退款冲销 |

## 自然语言 → 命令

| 用户说 | 命令 |
|--------|------|
| 给王芳开单基础服务加商品A | `uv run {baseDir}/scripts/cli.py order-create --member-id M001 --lines-json '[{"kind":"service","name":"基础服务","staff_id":"S001"},{"kind":"product","name":"商品A","qty":1}]'` |
| 结账 | 先 `order-create` 得 `order_id`（首条常为 O001），再 `order-settle --order-id O001 --pay stored_value --yes` |
| 退单冲销 | `uv run {baseDir}/scripts/cli.py order-refund --order-id O001 --yes` |

## 需要先确认的操作

- `order-cancel`、`order-settle`、`order-refund` 须用户确认后加 `--yes`。
- 次卡结算须 `--card-name`；混合支付须 `--lines-json`（支付行格式：`[{"type":"consume","amount":200},{"type":"cash","amount":98}]`）。

## 注意事项

- 数据库：`STORE_DB_PATH`（默认 `%USERPROFILE%\.config\store-suite\store.sqlite3`）。
- `order-settle` 会扣库存、记业绩、写支付流水。混合支付须 `--lines-json`，格式：`[{"type":"consume","amount":200},{"type":"cash","amount":98}]`；次卡须 `--card-name`。
- 错误码见 [references/errors.md](references/errors.md)。

## 示例

> 以下 `O001` 须先 `order-create` 取得；默认空库首单 ID 为 `O001`。

```bash
uv run {baseDir}/scripts/cli.py order-create --member-id M001 --lines-json '[{"kind":"service","name":"基础服务"},{"kind":"product","name":"商品A","qty":1}]'
uv run {baseDir}/scripts/cli.py order-settle --order-id O001 --pay stored_value --primary-staff-id S001 --yes
uv run {baseDir}/scripts/cli.py order-refund --order-id O001 --yes
```
