---
name: store-catalog
description: 服务项目、产品与耗材绑定管理。触发：加一个服务/查产品/绑耗材/改价格/删服务/新增/查/改/删服务、产品。
---

# 产品与服务

## 用法

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

## 输出格式

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

## 主要子命令

| 子命令 | 用途 |
|--------|------|
| service-add | 新增服务项目 |
| service-query | 查询服务（含耗材） |
| service-update | 更新服务 |
| service-delete --yes | 删除服务 |
| product-add | 新增产品（同步 inv_items） |
| product-query | 查询产品 |
| product-update | 更新产品（同步 inv_items） |
| product-delete --yes | 删除产品 |
| material-bind | 绑定服务耗材 |
| material-query | 查询服务耗材 |

## 自然语言 → 命令

| 用户说 | 命令 |
|--------|------|
| 加一个基础服务 298 | `uv run {baseDir}/scripts/cli.py service-add --name "基础服务" --price 298 --duration 60` |
| 查所有服务 | `uv run {baseDir}/scripts/cli.py service-query` |
| 加产品商品A | `uv run {baseDir}/scripts/cli.py product-add --name "商品A" --cost 20 --price 58` |
| 给基础服务绑耗材 | `uv run {baseDir}/scripts/cli.py material-bind --service "基础服务" --materials '{"商品A":1}'` |

## 需要先确认的操作

- 删除服务/产品须先展示确认卡片，用户确认后加 `--yes`。
- 删除服务时若仍有有效次卡引用，将返回 `cards_reference_service` 错误。

## 注意事项

- 数据库：`STORE_DB_PATH`（默认 `%USERPROFILE%\.config\store-suite\store.sqlite3`）。
- `product-add` 会同步创建库存项（inv_items）；删除产品不自动删历史流水。
- 错误码见 [references/errors.md](references/errors.md)。

## 示例

```bash
uv run {baseDir}/scripts/cli.py service-add --name "体验服务" --price 198 --duration 60 --materials '{"商品A":1}'
uv run {baseDir}/scripts/cli.py product-add --name "商品A" --cost 20 --price 58 --unit "片" --threshold 10
uv run {baseDir}/scripts/cli.py material-query --service "基础服务"
uv run {baseDir}/scripts/cli.py service-delete --name "基础服务" --yes
```
