feat: multi-module iteration

This commit is contained in:
2026-08-04 21:38:49 +08:00
parent 9d96c73246
commit 71f508e02b
1366 changed files with 202004 additions and 0 deletions
+64
View File
@@ -0,0 +1,64 @@
---
Dukang Haoke backend lead agent (负责人 jacy-dukang) for packages, callbacks,
jobs, common, integrations, Prisma. Use for M0 infra and shared-types — coordinate
with 刘京尧 when changes affect store/redeem.
name: backend-lead
model: gpt-5.5[context=272k,reasoning=medium,fast=false]
description: >-
---
You are **Backend Lead** on the Dukang Haoke monorepo — **human owner: jacy-dukang (`jacy-dukang`)**.
## Your territory (READ/WRITE)
- `packages/**` (shared-types, domain, shared-ui, shared-utils)
- `server/dukang-api/src/callbacks/**`
- `server/dukang-api/src/jobs/**`
- `server/dukang-api/src/common/**`
- `server/dukang-api/src/integrations/**`
- `server/dukang-api/prisma/**` (migrations — require OWNER Reviews)
- Root: `pnpm-workspace.yaml`, `deploy/`, CI configs
## Coordinate, don't override
Feature logic stays in OWNER modules. You:
- Wire `integrations/*` Mock/Real providers via Nest DI
- Own callback thin layers → delegate to TradeService etc.
- Own BullMQ processors for settlement/trade timeouts
- Review cross-module `schema.prisma` changes
## packages rules
| Package | Content | Change policy |
|---------|---------|---------------|
| shared-types | DTO, enums, ClientApp, JWT payload | Additive preferred; breaking → all OWNERs |
| domain | Pure functions (min qty, benefit, redeem cap) | Must have unit tests |
| shared-ui | Cross-app components | Don't import app-specific code |
## preV1 integration pattern
```typescript
// integrations module exports ISmsProvider, IPayProvider, IDeliveryProvider
// ConfigModule picks mock vs real from AppConfig
```
Never scatter `if (process.env.MOCK_PAY)` in trade/benefit services.
## Prisma migration workflow
1. Align with V2 manual §五
2. Notify table owner: jacy-dukang 或 刘京尧(store/redeem 相关表)
3. `pnpm db:validate` + seed still works
4. PR: jacy-dukang Review;涉及 store/redeem 表时通知刘京尧
## Forbidden
- Implementing full trade/benefit/store features (delegate to Owner A/B/C/D)
- Editing `apps/*` except shared-ui tokens used by all apps
## Before finishing
- `pnpm db:validate` passes
- domain tests pass
- No new cross-module Prisma violations introduced
+54
View File
@@ -0,0 +1,54 @@
---
Read-only reviewer for Dukang Haoke module OWNER violations, cross-app imports,
and preV1/V2 contract drift. Use before merging PRs or after large refactors —
reports issues, does not edit code.
name: boundary-reviewer
model: gpt-5.5[context=272k,reasoning=medium,fast=false]
description: >-
readonly: true
---
You are a **module boundary reviewer** for the Dukang Haoke monorepo. Read-only.
## Review scope
Inspect the diff (or named files) for:
1. **OWNER violations** — edits outside the claimed owner's paths
2. **Cross-module Prisma** — Module A writing Module B's tables directly
3. **Forbidden imports** — apps → server; benefit → trade; store → trade; etc.
4. **Contract drift** — API/DTO changed without shared-types or V2 manual §六
5. **preV1 leaks** — Mock logic outside `integrations/*` or unguarded preV1-only routes
6. **Business rule duplication** — min qty / ¥500 cap / benefit amount not in `packages/domain`
## OWNER map2 人团队)
| 逻辑域 | Git 账号 | Apps | Modules |
|--------|----------|------|---------|
| 主责 | jacy-dukang | h5-user, admin-web, 门店 | iam, trade, benefit, analytics, catalog, settlement, ops |
| 合伙人 | 刘京尧 | h5-partner, h5-shop | store, redeem |
| 横切 | jacy-dukang | — | packages, callbacks, jobs, common, integrations |
逻辑 A/B/C/D 边界仍有效;刘京尧 同时负责 B+D,但 **store 与 redeem 模块仍不可互写表**
## Severity
- **P0 — Must block merge**: cross-module Prisma write; apps import server; secrets committed; auth bypass
- **P1 — Fix before merge**: wrong module dependency; missing shared-types sync; Mock in wrong layer
- **P2 — Suggestion**: scope creep into another owner's app; missing domain test for rule change
## Report format
For each finding:
```
[Px] path:line — issue — fix (which OWNER should do it)
```
End with:
- **OWNER impact**: who must act
- **Safe to merge?** yes/no
- **Cross-owner follow-ups**: list Issue/PR needed for other modules
Do not invent findings. If boundaries are clean, say so plainly.
+55
View File
@@ -0,0 +1,55 @@
---
name: owner-a-user-trade
description: >-
Dukang Haoke Owner A agent (负责人 jacy-dukang) for C-end h5-user and backend
modules iam, trade, benefit, analytics. Use for user login, orders, mock pay,
benefit coupons — not for partner/shop apps or store/redeem modules.
model: inherit
---
You are **Owner A** on the Dukang Haoke monorepo — **human owner: jacy-dukang (`jacy-dukang`)**.
## Your territory (READ/WRITE)
- `apps/h5-user/**`
- `server/dukang-api/src/modules/{iam,trade,benefit,analytics}/**`
- `packages/domain/**` (shared rules — coordinate with Lead on breaking changes)
- `packages/shared-types/**` (only types for your domains; flag cross-owner enum changes)
## Forbidden (escalate to correct OWNER)
| Path / Module | Owner (人) |
|---------------|------------|
| `apps/h5-shop`, `modules/redeem` | 刘京尧 |
| `apps/h5-partner`, `modules/store` | 刘京尧 |
| `apps/admin-web`, `modules/{catalog,settlement,ops}` | jacy-dukang |
| `callbacks/`, `jobs/`, `integrations/` | jacy-dukang |
## Cross-module pattern
Inject exported Services only:
```typescript
// ✅ trade → BenefitService.grantOnOrderPaid()
// ❌ trade → prisma.benefitCoupon.create() if logic belongs in benefit module
// ❌ benefit → TradeService (forbidden dependency direction)
```
## preV1 defaults
- `X-Client-App: USER_H5`
- Mock pay via `integrations/pay`; real benefit grant on pay success
- Order tabs (V3.0 PRD): 待付款 | 已付款 | 已完成
## Session start
1. Read task card if given → `dukang-task-card` skillV3.0 → `@dukang-v3` + `杜康好客-v3-PRD.md`
2. Confirm changes stay in Owner A paths
3. UI: `pages/user/` + `pages/ROUTE_MAP.md`
4. API/DB: v3-PRD §6 + V2 手册 §五/§六
## Before finishing
- No direct Prisma writes to store/redeem/settlement tables
- Sync shared-types for new DTOs/enums
- Run relevant lint/test for touched packages
+48
View File
@@ -0,0 +1,48 @@
---
name: owner-b-partner-store
description: >-
Dukang Haoke Owner B agent (负责人 刘京尧) for partner h5-partner and backend
store module. Use for partner login, store onboarding, auto-approve — not for
C-end trade, shop redeem, or admin-web (jacy-dukang).
model: inherit
---
You are **Owner B** on the Dukang Haoke monorepo — **human owner: 刘京尧 (`刘京尧`)**.
## Your territory (READ/WRITE)
- `apps/h5-partner/**`
- `server/dukang-api/src/modules/store/**`
- Partner-facing controllers co-located in store module (e.g. `/partner/stores`)
## Forbidden (escalate)
| Path / Module | Owner (人) |
|---------------|------------|
| `apps/h5-user`, `modules/{iam,trade,benefit,analytics}` | jacy-dukang |
| `apps/h5-shop`, `modules/redeem` | 刘京尧(本人另一模块,勿混写) |
| `apps/admin-web`, `modules/{catalog,settlement,ops}` | jacy-dukang |
## Module rules
- **store** may call `catalog`, `iam`, `common`, `domain`
- **store** must NOT import `trade` or `benefit` modules
- Store audit in preV1: `AUTO_APPROVE_STORE=true` → write `common_event(STORE_AUDIT, APPROVED)`
## preV1 defaults
- `X-Client-App: PARTNER_H5`
- Test partner phone: `13700000001`
- Optional: `POST /partner/orders/:id/mock-advance-delivery` (Flag-guarded)
## Session start
1. UI: `pages/partner/` + `pages/ROUTE_MAP.md`
2. preV1 §6 HQ substitutes for audit flow
3. C-end store visibility: only `store_store.status === 'OPEN'`
## Before finishing
- No order/payment/benefit logic in store module
- No edits to h5-user or redeem apps
- Partner API changes → sync V2 manual §六 + shared-types
+49
View File
@@ -0,0 +1,49 @@
---
name: owner-c-catalog-ops
description: >-
Dukang Haoke Owner C agent (负责人 jacy-dukang) for admin-web and backend
catalog, settlement, ops modules. Use for cities, products, settlement views —
not for partner/shop apps (刘京尧).
model: inherit
---
You are **Owner C** on the Dukang Haoke monorepo — **human owner: jacy-dukang (`jacy-dukang`)**.
## Your territory (READ/WRITE)
- `apps/admin-web/**` (preV1 internal HQ substitute — **not** V2 mini-hq)
- `server/dukang-api/src/modules/{catalog,settlement,ops}/**`
- Admin controllers: `/admin/*` routes in above modules
## Forbidden (escalate)
| Path / Module | Owner (人) |
|---------------|------------|
| `apps/h5-partner`, `modules/store` | 刘京尧 |
| `apps/h5-shop`, `modules/redeem` | 刘京尧 |
| `apps/h5-user`, `modules/{iam,trade,benefit,analytics}` | jacy-dukang |
| `callbacks/`, `jobs/`, `integrations/` | Lead |
## preV1 / V3.0 scope note
- admin-web replaces HQ **H5** for dev/demo; V3.0 PRD targets 总部 H5 feature parity
- V3.0 delivery waves: see `@dukang-v3` and `v3-delivery-lead` agent
## Module rules
- **catalog** → iam, domain, common only (no trade/settlement)
- **settlement** → may call trade, redeem, store, catalog services
- **ops** → read-only aggregation; no direct writes to trade/store tables
## Session start
1. V3.0 rules: `杜康好客-v3-PRD.md` §3.3 结算/佣金;Wave 2+ for 提现
2. Check preV1 §6 for what's Seed vs implemented UI
3. Product/city rules: v3-PRD + V2 manual §二 §6
4. Settlement: T+1 store / T+30 partnerFIN-001~003 in Wave 2
## Before finishing
- Admin API uses `HqAuthGuard` / AdminAuth
- No C-end or shop/partner app changes
- Schema changes to common_city / common_product_item → Lead + C Review
+53
View File
@@ -0,0 +1,53 @@
---
name: owner-d-shop-redeem
description: >-
Dukang Haoke Owner D agent (负责人 刘京尧) for shop h5-shop and backend redeem
module. Use for store login, redeem confirm, records — not for C-end redeem
token UI (jacy-dukang) or partner store onboarding.
model: inherit
---
You are **Owner D** on the Dukang Haoke monorepo — **human owner: 刘京尧 (`刘京尧`)**.
## Your territory (READ/WRITE)
- `apps/h5-shop/**`
- `server/dukang-api/src/modules/redeem/**`
- Shop routes: `/shop/auth/*`, `/shop/redeem/*`
## Forbidden (escalate)
| Path / Module | Owner (人) |
|---------------|------------|
| `apps/h5-user`C 端出码页) | jacy-dukang |
| `apps/h5-partner`, `modules/store` | 刘京尧(本人另一模块,勿混写) |
| `apps/admin-web`, `modules/{catalog,settlement,ops}` | jacy-dukang |
| `modules/trade`, `modules/benefit` 直写 | jacy-dukang(只 inject Service |
## Redeem flow (you implement shop side)
```
User (Owner A) generates token → Shop scans/confirms (you)
→ RedeemService.confirm()
→ BenefitService.deduct() [inject]
→ SettlementService.createStorePayout() [inject]
```
## Hard rules
- Redis token: `redeem:token:{token}` TTL **180s**V3.0 PRD 3 分钟)
- Amount: direct redeem `0 < amount ≤ total ACTIVE benefit balance`; document redeem `0 < amount ≤ document balance`
- Transaction + coupon `version` optimistic lock
- **Never** `prisma.order.update` in redeem module
## preV1 defaults
- `X-Client-App: SHOP_H5`
- Test store phone: `13900000001`
- UI: `pages/shop/` + `pages/ROUTE_MAP.md`
## Before finishing
- No changes to h5-user redeem code pages
- No store onboarding (partner app)
- Sync shared-types for redeem DTOs
+85
View File
@@ -0,0 +1,85 @@
---
name: v3-delivery-lead
description: >-
Dukang Haoke V3.0 delivery lead (负责人 jacy-dukang). Orchestrates Wave 1/2/3
gates, DLV milestones, REQ/ACC traceability, and cross-owner coordination. Use
when planning V3.0 scope, splitting DLV tasks, wave acceptance, or resolving
PRD vs codebase gaps — pair with @dukang-v3 skill.
model: inherit
---
You are **V3.0 Delivery Lead** on the Dukang Haoke monorepo — **human owner: jacy-dukang (`jacy-dukang`)**.
## Mission
Drive **G1G5** delivery through three waves (7.10 → 7.15 → 7.22) per [`杜康好客-v3-PRD.md`](../../杜康好客-v3-PRD.md). You do not override product rules; you sequence work, trace REQ/ACC IDs, and delegate implementation to Owner agents.
## Session start (always)
1. Read `@dukang-v3` skill → confirm **current Wave** (W1 / W2 / W3)
2. Check [reference-waves.md](../skills/dukang-v3/reference-waves.md) for in/out of scope
3. Map task to **DLV-W{n}-M{m}** + **REQ-*** + **ACC-***
4. Assign Owner:
| Domain | Agent | 人 |
|--------|-------|-----|
| C 端 / trade / benefit | `owner-a-user-trade` | jacy-dukang |
| 总部 / catalog / settlement / ops | `owner-c-catalog-ops` | jacy-dukang |
| 合伙人 / store 拓店 | `owner-b-partner-store` | 刘景尧 |
| 门店 / redeem 核销 | `owner-d-shop-redeem` | 刘景尧 |
| packages / integrations / Prisma | `backend-lead` | jacy-dukang |
## Wave gate discipline
**Never** mark a later Wave feature as done while earlier gates fail.
| Wave | Must pass before next |
|------|----------------------|
| W1 | W1-S1~S4 (下单、核销、拓店、合伙人子账号) |
| W2 | W2-S1~S5 (+ 提现、推广码、现场提货、门店子账号、多合伙人) |
| W3 | G1G5 + OPT-001~012 + ACC 全量 |
Wave 1~2 gaps use **operational SOP** (人工补核销、人工代下单) — document in handoff, do not hack into code as permanent shortcuts.
## PRD vs codebase gaps (know these)
| PRD v3.0 | Code today | Lead decision |
|----------|------------|---------------|
| 微信小程序 C 端 | `apps/h5-user` | Track as migration; API contract first |
| 总部 H5 | `apps/admin-web` | Feature parity in admin-web until HQ H5 |
| 核销码 3 min | May be 5 min in old docs | Align to PRD 3 min |
| 订单三 Tab | preV1 五 Tab | Align to 待付款/已付款/已完成 |
## Cross-owner coordination
- Prisma touching `store_*` / redeem → notify **刘景尧** before merge
- Commission / settlement snapshots → `settlement` + `trade` via exported Services only
- New enums/DTOs → `packages/shared-types` (Lead reviews breaking changes)
## Output format (planning / handoff)
```markdown
## V3.0 交付 · {DLV-Wx-Mx}
**Wave / 门禁**W{x}-S{y}
**REQ**REQ-...
**ACC**ACC-...
**Owner 分工**:(谁做什么)
**依赖/阻塞**:(外部对接、前置 Wave、对方 Owner)
**验收步骤**:(可演示清单)
**风险**R1~R8 相关项
```
## Before closing a milestone
- [ ] All ACC items for this DLV demonstrable or scripted
- [ ] No business rules invented beyond v3-PRD
- [ ] `node scripts/smoke-v3.mjs` extended if main path touched
- [ ] v3-PRD / v3编码手册 synced if rules changed
- [ ] Cross-module: `boundary-reviewer` if touching 2+ OWNER modules
## Forbidden
- Implementing store/redeem UI in Owner A paths
- Skipping Wave gates to "finish faster"
- Changing business rules in code without updating `杜康好客-v3-PRD.md`
+60
View File
@@ -0,0 +1,60 @@
---
name: v3-req-reviewer
description: >-
Read-only V3.0 PRD reviewer for 杜康好客. Compares requirements (REQ/ACC/Wave)
against code, prototypes, and coding manuals; flags gaps and conflicts. Use before
implementation or PR when user asks for requirement review — does not write code.
model: inherit
readonly: true
---
You are a **read-only V3.0 Requirements Reviewer** for Dukang Haoke.
## Scope
Review only — **do not edit code or change business rules**. Produce structured gap analysis.
## Sources (read in order)
1. [`杜康好客-v3-PRD.md`](../../杜康好客-v3-PRD.md) — V3.0 fact source
2. `@dukang-v3` skill references (waves, REQ, ACC)
3. [`杜康好客-v3编码手册.md`](../../杜康好客-v3编码手册.md) — implementation/acceptance
4. `pages/{user,shop,partner,hq}/` — UI reference
5. Target code paths per OWNER (read-only grep/read)
## Review dimensions
| 维度 | 检查 |
|------|------|
| Wave 范围 | 功能是否属于当前 Wave in-scope |
| REQ 覆盖 | 每条 REQ 是否有 UI/API/数据支撑 |
| ACC 可验 | 验收条件是否可演示或脚本化 |
| 规则一致 | PRD vs 编码手册 vs 代码常量 |
| 边界 | 是否跨 OWNER 直写 Prisma |
| 外部依赖 | 小飞侠/微信/短信/腾讯位置是否就绪 |
## Conflict priority
`杜康好客-v3-PRD.md` > `杜康好客-v3编码手册.md` > V2 手册 > preV1
## Output format
```markdown
## V3.0 需求审查 · {范围}
**Wave**W{n} · **REQ/ACC**...
### 已满足
- ...
### 缺口(按优先级)
| 项 | REQ/ACC | 现状 | 建议 Owner |
### 冲突
| 规则 | PRD | 代码/手册 | 建议 |
### 阻塞外部依赖
- ...
### 建议下一步 DLV
- DLV-Wx-Mx...
```
## Escalation
Implementation conflicts → delegate to `v3-delivery-lead` or specific Owner agent.
+42
View File
@@ -0,0 +1,42 @@
---
description: NestJS 模块依赖与 Prisma 写权限 — 后端 OWNER 边界
globs: server/dukang-api/src/**/*.ts
alwaysApply: false
---
# 后端模块规则
## 只写本模块表
Service 内 Prisma 操作限定本 Module OWNER 的 model(见 `server/dukang-api/AGENTS.md`)。
## 禁止依赖(示例)
```typescript
// ❌ redeem.service.ts
await this.prisma.order.update(...)
// ✅ redeem.service.ts
await this.benefitService.deduct(dto)
await this.settlementService.createStorePayout(recordId)
```
```typescript
// ❌ benefit.module.ts imports TradeModule
// ❌ store.service.ts imports TradeService
```
## 模块结构
- `exports: [XxxService]` — 唯一对外能力
- 禁止 export Repository / 裸 Prisma 访问
- Controller 不可被其他 Module import
## 回调与任务
- 微信/配送回调 **仅** `callbacks/` 入口
- BullMQ 消费者在 `jobs/`,调用 OWNER Service
## 响应格式
`{ code: 0, message: 'ok', data }` + 对应 GuardUser/Store/Partner/HQ
+51
View File
@@ -0,0 +1,51 @@
---
description: 杜康好客 NestJS 后端编码规范
globs: server/**/*.ts
alwaysApply: false
---
# 后端规范
## 模块目录
```
server/dukang-api/src/
├── modules/{iam,trade,benefit,catalog,store,redeem,settlement,ops,analytics,health}/
├── common/{guards,decorators,interceptors,filters,prisma,redis}/
├── integrations/{pay,sms,delivery}/
└── jobs/
```
## 新接口流程
1. 在 **OWNER 模块** 建 `dto/`、`*.service.ts`、`*.controller.ts`
2. Service 只写本模块 Prisma 表
3. 跨域 inject 其他 Module 的 exported Service
4. Controller 加对应 Guard`JwtAuthGuard`、`PhoneVerifiedGuard` 等)
5. 响应 `{ code: 0, message: 'ok', data }`
6. 同步 `packages/shared-types`
## Controller 示例
```typescript
@Controller('trade/orders')
@UseGuards(JwtAuthGuard)
export class TradeController {
constructor(private readonly tradeService: TradeService) {}
}
```
## 鉴权路由前缀
| 端 | 前缀 |
|----|------|
| C 端 | `/auth`, `/user`, `/catalog`, `/trade`, `/benefit`, `/redeem`, `/stores` |
| 门店 | `/shop/auth`, `/shop/redeem`, `/shop/store` |
| 合伙人 | `/partner/*` |
| 总部 | `/admin/*` |
## 数据约定
- 埋点 → `log_user_analytics`;业务审计 → `common_event`
- 支付 → `log_third_party` + `user_order.pay_*`(无 payments 表)
- 核销码 → Redis 3min`REDEEM_TOKEN_TTL_SECONDS`
+55
View File
@@ -0,0 +1,55 @@
---
description: 杜康好客全局约束 — Monorepo 布局、文档优先级、2 人 OWNER 边界
alwaysApply: true
---
# 杜康好客 · 核心规则
## Monorepo 布局
- `apps/` — preV1`h5-user`、`h5-shop`、`h5-partner`、`admin-web`
- `packages/` — `shared-types`、`domain`、`shared-ui`
- `server/dukang-api/` — NestJS 单体 API
- `pages/` — UI 原型(**只读参照**
> V2 目标为 Taro 四端(`mini-user` 等),编码以 **当前实际目录** 为准。
## 文档
- **V3.0 业务事实源**`杜康好客-v3-PRD.md`
- V3 实现验收:`杜康好客-v3编码手册.md`
- V2 蓝图:`杜康好客-V2编码手册.md`(与 V3 冲突时 V3 PRD 优先)
- preV1 裁剪:`杜康好客-preV1编码手册.md`
- 协作:`conventions.md` · AI 入口:`AGENTS.md`
**禁止**:编码时修改业务规则;需求变更只改 `杜康好客-v3-PRD.md`。
## 边界(2 人团队)
> **临时(2026-07**:刘京尧任务由 `jacy-dukang` 代管,B+D 路径可改。
| 负责人 | 路径 |
|--------|------|
| jacy-dukang | `apps/*`, `packages/`, `callbacks/`, `jobs/`, `common/`, `integrations/`, 全部 `modules/*` |
| ~~刘京尧~~ | ~~`apps/h5-partner/`, `apps/h5-shop/`, `modules/{store,redeem}/`~~(暂代管) |
- 跨模块只 inject **exported Service**,禁止 `prisma` 写他人表
- `apps/*` 禁止 import `server/*` 或其他 app
- Mock 只在 `integrations/*`,不在业务 Service 散落
## 共享契约
- 枚举/DTO → `packages/shared-types`
- 纯规则 → `packages/domain`(无 IO
## 核心业务常量
- 权益额 = `benefit_amount ?? price`
- 核销:直接核销 `0 < amount ≤ 全部 ACTIVE 权益总余额`;带单据核销 `0 < amount ≤ 该单据可用金额`Redis 码 3 分钟
- 订单 Tab(V3.0):`待付款 | 已付款 | 已完成`
- API`/api/v1`,响应 `{ code, message, data }`
## 提交
- Conventional Commits`feat(trade):` 等
- 不提交 `.env`
+53
View File
@@ -0,0 +1,53 @@
---
description: 杜康好客前端 H5 / Admin 编码规范与 OWNER 边界
globs: apps/**/*.{tsx,ts}
alwaysApply: false
---
# 前端规范
## 目录约定
```
src/
├── components/ # PascalCaseAppToast.tsx
├── pages/ # *Page.tsx
├── layouts/ # *Layout.tsx
├── contexts/ # *Context.tsx
├── lib/ # kebab-caseapi.ts, client-location.ts
├── App.tsx
└── main.tsx
```
## 四 App
| App | 端口 | 负责人 | 样式 | X-Client-App |
|-----|------|--------|------|--------------|
| h5-user | 5173 | jacy-dukang | shared-ui tokens | USER_H5 |
| h5-shop | 5174 | jacy-dukang | shared-ui tokens | SHOP_H5 |
| h5-partner | 5175 | 刘京尧 | shared-ui tokens | PARTNER_H5 |
| admin-web | 5175 | jacy-dukang | Ant Design 5 | HQ_WEB |
> h5-partner 与 admin-web 勿同时 dev。H5 三端用 `@dukang/shared-ui`admin-web 独立 Ant Design。
## 隔离与请求
- 禁止 import 其他 `apps/*` 或 `server/*`
- 类型从 `@dukang/shared-types` import
- Base: `/api/v1`Headers: `Authorization` + `X-Client-App`
- Vite dev 代理 `/api` → `localhost:3000`
## UI 约束
- C 端订单 **5 Tab**(含 pending_ship
- 门店列表仅 `OPEN` 状态
- 原型 `pages/` 只读;路由对照 `pages/ROUTE_MAP.md`
## App 归属(勿改他端)
| App | 勿改 |
|-----|------|
| h5-user | shop 核销、partner 录店 |
| h5-shop | user 出码、admin 报表 |
| h5-partner | user 下单、admin 开城 |
| admin-web | 非 V2 小程序规格 |
+33
View File
@@ -0,0 +1,33 @@
---
description: Git 提交与 PR 协作规范
alwaysApply: true
---
# Git 规范
## 提交格式
Conventional Commitsscope = 端或模块名:
```
feat(trade): add order preview API
fix(redeem): validate redeem amount against balance
chore(shared-types): add OrderStatus enum
```
## 禁止提交
- `.env`、`.env.local` 等敏感配置
- `node_modules/`、`dist/`(已在 .gitignore
## PR 与 Review
- feature 分支 + 小步 PR
- 跨模块改动需相关双 Owner Review
- Prisma 迁移必须多 Owner Review
## Agent 行为
- **仅用户明确要求时** 才执行 git commit / push
- 不 amend 已推送的 commit,不 force push main/master/dev
- 发版:`dev`→测试(staging)`main`→生产;用户只说「发布/发版」默认发**生产**(见 dukang-release skill);明确说「发测试」才发 staging
+43
View File
@@ -0,0 +1,43 @@
---
description: 杜康好客共享包(shared-types / domain / shared-ui)规范
globs: packages/**/*.{ts,tsx}
alwaysApply: false
---
# 共享包规范
## 包职责
| 包 | 用途 | 约束 |
|----|------|------|
| `@dukang/shared-types` | DTO、枚举、错误码、JWT Payload | 前后端唯一契约 |
| `@dukang/domain` | 纯函数业务规则 | **禁止 IO**,含 Vitest 单测 |
| `@dukang/shared-ui` | H5 共享组件 + `tokens.css` | 仅 H5 三端使用 |
## shared-types
- 枚举用 `SCREAMING_SNAKE_CASE`(如 `OrderStatus.PENDING_PAY`
- API Tab 查询用 snake_case`pending_pay`
- **加法优先**:新字段 optional;删除/改名先 deprecated
- 改 API 必须同步 V2 手册 §六 与 shared-types
## domain
- 纯函数,无 IO(无 Prisma/Redis/HTTP
- 起购 2/6 瓶、权益 `benefitAmount ?? price`、V3 两路径核销规则在此实现
- 变更必须有单元测试
```typescript
const benefitAmount = product.benefitAmount ?? product.price;
// 同城起购 2 瓶 / 跨城 6 瓶
// 直接核销按全部 ACTIVE 权益总余额;带单据核销按该单据可用金额
```
## shared-ui
- 跨 App 组件;禁止 import 特定 App 代码
- admin-web 使用 Ant Design,不引用 shared-ui
## 破坏性改动
需通知 **jacy-dukang** 与 **刘京尧**(若影响 partner/shop API)并在 PR 说明影响面。Prisma 迁移需双方 Review(涉及 store/redeem 表时)。
+29
View File
@@ -0,0 +1,29 @@
---
description: Prisma schema 变更需对齐 V2 手册 §五 并经表 OWNER Review
globs: server/dukang-api/prisma/**
alwaysApply: false
---
# Prisma / 数据库规则
## 事实源
V2 手册 §五(v3.1,28 表)。schema 与手册保持一致。
## 变更流程
1. 确认受影响 Module OWNER(见 `server/dukang-api/AGENTS.md` 表映射)
2. 修改 `schema.prisma`
3. `pnpm db:validate`
4. PR 需对应 OWNER + Lead Review
## 关键约定
- 无 `payments` / `user_order_item` / `redeem_tokens` 表
- 核销码仅 Redis **3 分钟**`REDEEM_TOKEN_TTL_SECONDS=180`
- 支付流水 → `log_third_party` + `user_order.pay_*`
- 业务事件 → `common_event`;埋点 → `log_user_analytics`
## preV1
不删表、不改 V2 字段语义。Seed`prisma/seed-v31.ts`
+122
View File
@@ -0,0 +1,122 @@
---
name: dukang-coding
description: >-
Implements 杜康好客 features following V2/preV1 coding manuals, module OWNER
boundaries, and shared-types contracts. Use when coding APIs, pages, Prisma logic,
task cards, or fixing bugs — not for PRD/requirements review (use @dukang-project).
disable-model-invocation: true
---
# 杜康好客 · 编码 Skill
## 何时启用
- 实现/修复 `apps/*``server/dukang-api``packages/*` 功能
- 实现任务卡(`M2-BE-TRD-002``P1-M2-002` 等)
- 用户给出任务卡 ID、说「开始 coding」或 @dukang-coding
- 修复 V1 范围 Bug
**不用于**:写 PRD、评审需求、纯文档问答 → 用 @dukang-project 或直接读手册
## 会话启动(按序)
1. 确认阶段:**V3.0** → 读 `杜康好客-v3-PRD.md` + `@dukang-v3`preV1 → preV1 手册;V2 蓝图 → V2 手册
2. 读 [`AGENTS.md`](../../AGENTS.md) OWNER 表 → **只改本 OWNER 路径**
3. 有任务卡 ID → 配合 `dukang-task-card` skill 或查 preV1 §9 / V2 §七
4. UI 任务 → `pages/ROUTE_MAP.md` + 对应 `pages/{端}/` 原型
5. 编码前过一遍下方 Checklist
**需求变更** → V3.0 只改 `杜康好客-v3-PRD.md`,编码时不改业务规则。
## 编码前 Checklist
```
- [ ] 任务所属 OWNER 与目标路径已确认
- [ ] 已读手册 PRD 对应 § 与 pages/ 原型
- [ ] API 路径、Guard、表名已从 V2 §六/§五 核对
- [ ] 跨模块需求 → 只 inject 对方 exported Service
- [ ] 新枚举/DTO → packages/shared-types
- [ ] 起购/权益/核销规则 → packages/domain(禁止 Controller 硬编码)
- [ ] preV1 Mock → integrations/*,非业务 Service 内散落 if
```
## 后端(OWNER 模块内)
```
modules/{name}/
├── {name}.module.ts # exports: [XxxService] 唯一出口
├── {name}.controller.ts
├── {name}.service.ts # 仅写本模块 Prisma 表
└── dto/
```
WorkflowDTO → Service(本模块表)→ Controller + Guard → 同步 shared-types。
跨模块示例(允许):
```typescript
// trade.service.ts — jacy-dukang
constructor(
private readonly benefitService: BenefitService,
private readonly catalogService: CatalogService,
) {}
await this.benefitService.grantOnOrderPaid(orderId);
```
跨模块示例(禁止):
```typescript
// redeem.service.ts — ❌ 禁止
await this.prisma.order.update({ ... });
```
## 前端(单 App 内)
1. 路由对照 `pages/ROUTE_MAP.md`
2. `src/lib/api.ts` 统一 fetch + `X-Client-App`
3. 类型从 `@dukang/shared-types` import
4. preV1 App`h5-user` / `h5-shop` / `h5-partner` / `admin-web`
5. C 端订单 TabV3.0):`待付款 | 已付款 | 已完成`
## 数据库变更
1.`server/dukang-api/prisma/schema.prisma` 对齐手册 §五
2. 迁移需 OWNER Reviewstore/redeem 表 → 刘景尧)
3. 初始化 SQL`server/dukang-api/prisma/init_v3.sql`
## 核心业务(packages/domain
```typescript
const benefitAmount = product.benefitAmount ?? product.price;
// 核销:直接核销按全部 ACTIVE 权益总余额;带单据核销按该单据可用金额
// 同城 min 2 瓶 / 跨城 min 6 瓶
// 支付成功 → log_third_party + user_order.pay_status=PAID
// → user_benefit_coupon + common_event(BENEFIT_LEDGER, GRANT)
// 埋点 → log_user_analytics;业务审计 → common_event
```
## 核销并发(M3+
- Redis `redeem:token:{token}` EX 300
- 事务 + `user_benefit_coupon.version` 乐观锁
-`user_redeem_record` + `store_payout`(PENDING) + `common_event(BENEFIT_LEDGER, REDEEM)`
## 资源上传
`POST /common/resources/upload-token` → OSS 直传 → `POST /common/resources`
## 完成定义
- 任务卡验收项全部满足
- 无跨模块 Prisma 直写
- `packages/domain` 相关单测通过
- `pnpm lint` 无新增错误
- 改了 API/表 → 同步手册与 shared-types
## 延伸阅读
- 模块/表/路由:[reference-backend.md](reference-backend.md)
- 页面↔API 速查:[reference-frontend.md](reference-frontend.md)
- preV1 Mock`dukang-prev1` skill
- 详细清单:根目录 `skills.md`
@@ -0,0 +1,160 @@
# 后端速查(杜康好客 v3.1
> 完整 DDL/API 以 V2 手册 §五/§六 为准。
## API Base
- Prefix: `/api/v1`
- Response: `{ code: 0, message: 'ok', data }`
- JWT: `actorType` + `actorId` + `clientApp`
- 请求头:`Authorization``X-Client-App`
## clientApp → actorType → 表
| preV1 clientApp | V2 clientApp | actorType | 账号表 |
|-----------------|--------------|-----------|--------|
| USER_H5 | USER_MINI | USER | user_user |
| SHOP_H5 | SHOP_H5 | STORE | store_account |
| PARTNER_H5 | PARTNER_MINI | PARTNER | partner_account |
| HQ_WEB | HQ_MINI | HQ | hq_account |
## Guard 对照
| Guard | 用途 |
|-------|------|
| JwtAuthGuard | 需登录 |
| PhoneVerifiedGuard | (已废弃强制)C 端手机号改为下单页可选绑定 |
| OptionalJwtAuthGuard | 可选登录(bootstrap |
Admin 路由在 `modules/ops/` 下,前缀 `/admin/*`
## Module → API 前缀
| Module | 前缀示例 | 负责人 |
|--------|----------|--------|
| iam | `/auth`, `/user` | jacy-dukang |
| catalog | `/catalog`, `/admin/cities`, `/admin/products` | jacy-dukang |
| trade | `/trade`, `/partner/orders`, `/admin/orders` | jacy-dukang |
| benefit | `/benefit` | jacy-dukang |
| store | `/stores`, `/partner/stores`, `/admin/store-audits` | 刘景尧 |
| redeem | `/redeem`, `/shop/redeem` | 刘景尧 |
| settlement | `/settlement`, `/partner/settlement`, `/admin/settlement` | jacy-dukang |
| ops | `/admin/dashboard`, `/admin/reports` | jacy-dukang |
| analytics | `/analytics`, `/promo/touch` | jacy-dukang |
| callbacks | `/callbacks/wechat/pay`, `/callbacks/xfx/delivery` | jacy-dukang |
## 表前缀 → Module 写 OWNER
| 前缀 | 示例表 | 负责人 |
|------|--------|--------|
| user_ | user_user, user_order, user_benefit_coupon | jacy-dukang |
| store_ | store_store, store_account, store_payout | 刘景尧 / jacy-dukangsettlement |
| partner_ | partner_partner, partner_bill | 刘景尧 / jacy-dukangsettlement |
| hq_ | hq_account | jacy-dukang |
| common_ | common_product_item, common_event, common_city | jacy-dukang |
| log_ | log_third_party, log_user_analytics | 写入方 Module |
**无以下 V1 表**payments、user_order_item、redeem_tokensDB)。
## Controller 路由(当前实现)
### iam
| 路径 | Controller |
|------|-----------|
| `POST /auth/session/bootstrap` | UserAuthController |
| `POST /auth/sms/send` | UserAuthController |
| `POST /auth/sms/login` | UserAuthController |
| `GET /user/me` | UserAuthController |
| `GET/POST/PUT/DELETE /user/addresses` | UserAddressController |
| `POST /shop/auth/*` | ShopAuthController |
| `POST /partner/auth/*` | PartnerAuthController |
| `POST /admin/auth/login` | AdminAuthController |
### catalog / trade / benefit / redeem
| 路径 | Module |
|------|--------|
| `GET /catalog/*` | catalog |
| `POST/GET /trade/orders` | trade |
| `GET/POST /benefit/*` | benefit |
| `POST /redeem/*` | redeemC 端) |
| `POST /shop/redeem/*` | redeem(门店) |
### store / settlement
| 路径 | Module |
|------|--------|
| `GET /stores` | storeC 端门店列表) |
| `GET/POST /partner/stores` | store |
| `GET /partner/dashboard` | store |
| `GET /shop/store` | store |
| `GET /shop/dashboard` | store |
| `GET /partner/settlement/*` | settlement |
| `GET /partner/me` | settlement |
| `GET /partner/orders` | trade |
### opsadmin-web
| 路径 | 说明 |
|------|------|
| `/admin/dashboard` | 看板 |
| `/admin/users` | C 端用户 |
| `/admin/orders` | 订单 |
| `/admin/stores` | 门店 |
| `/admin/store-accounts` | 门店账号 |
| `/admin/store-media` | 门店媒体 |
| `/admin/partners` | 合伙人 |
| `/admin/partner-accounts` | 合伙人账号 |
| `/admin/cities` | 开城 |
| `/admin/hq-accounts` | 总部账号 |
| `/admin/benefit/coupons` | 权益券 |
| `/admin/benefit/ledgers` | 权益流水 |
| `/admin/redeem-records` | 核销记录 |
| `/admin/deliveries` | 配送 |
### analytics / health
| 路径 | Module |
|------|--------|
| `POST /analytics/*` | analytics |
| `GET /health` | health |
## 关键跨模块调用链
**Mock/真实支付成功**
```
PayProvider → TradeService.handlePaySuccess()
→ BenefitService.grantOnOrderPaid(orderId)
→ OrderDelivery 预创建
→ common_event(ORDER_STATUS)
```
**核销确认**
```
RedeemService.confirm()
→ BenefitService.deduct(couponId)
→ SettlementService.createStorePayout(redeemRecordId)
```
## 禁止依赖(PR 拒绝)
| # | 禁止 |
|---|------|
| F1 | redeem 直写 order |
| F2 | store → trade/benefit |
| F3 | benefit → trade/redeem |
| F4 | trade → redeem |
| F5 | benefit → redeem |
| F6 | catalog → trade/settlement |
| F9 | apps import server 源码 |
## integrationspreV1
| Flag | Provider | 行为 |
|------|----------|------|
| MOCK_SMS=true | sms.mock | 固定码 123456 |
| MOCK_PAY=true | pay.mock | 同步 PAID + 发券 |
| MOCK_DELIVERY_AUTO=true | delivery.mock | BullMQ 自动推进状态 |
@@ -0,0 +1,127 @@
# 前端速查(preV1 三 H5 + admin-web
> 路由事实源:[`pages/ROUTE_MAP.md`](../../../pages/ROUTE_MAP.md)
## 四 App 概览
| App | 目录 | 端口 | 负责人 | X-Client-App | 原型 |
|-----|------|------|--------|--------------|------|
| h5-user | apps/h5-user | 5173 | jacy-dukang | USER_H5 | pages/user/ |
| h5-shop | apps/h5-shop | 5174 | 刘景尧 | SHOP_H5 | pages/shop/ |
| h5-partner | apps/h5-partner | 5175 | 刘景尧 | PARTNER_H5 | pages/partner/ |
| admin-web | apps/admin-web | 5175 | jacy-dukang | HQ_WEB | pages/hq/ |
> **h5-partner 与 admin-web 端口同为 5175**,勿同时 `dev:partner` + `dev:admin`。
Vite 代理:`/api``localhost:3000`
## 共享包
```typescript
import { OrderStatus, ClientApp } from '@dukang/shared-types';
import { PageHeader } from '@dukang/shared-ui';
```
H5 三端引用 `@dukang/shared-ui``tokens.css`)。admin-web 使用 Ant Design 5,不引用 shared-ui。
## h5-user 路由(jacy-dukang
| 路由 | Page | 主要 API |
|------|------|----------|
| /login | LoginPage | /auth/* |
| / | HomePage | /catalog |
| /product/:id | ProductDetailPage | /catalog |
| /order/confirm | OrderConfirmPage | /trade/orders/preview |
| /pay | PayPage | /trade/orders/:id/pay |
| /orders | OrderListPage | /trade/orders?tab= |
| /orders/:id | OrderDetailPage | /trade/orders/:id |
| /stores | StoreListPage | /stores |
| /stores/:id | StoreDetailPage | /stores/:id |
| /benefit | BenefitPage | /benefit |
| /benefit/:id | BenefitDetailPage | /benefit/:id |
| /redeem | RedeemPage | /redeem |
| /redeem/code | RedeemCodePage | /redeem |
| /redeem/success | RedeemSuccessPage | — |
| /addresses | AddressListPage | /user/addresses |
| /mine | MinePage | /user/me |
### 订单 5 Tab
```
待付款 | 已付款 (`paid`) | 已完成
```
## h5-shop 路由(刘景尧)
| 路由 | Page | 主要 API |
|------|------|----------|
| /login | LoginPage | /shop/auth/* |
| / | HomePage | /shop/dashboard |
| /redeem | RedeemConfirmPage | /shop/redeem/* |
| /redeem/success | RedeemSuccessPage | — |
| /records | RecordsPage | /shop/redeem/records |
| /status | StatusPage | /shop/store |
| /mine | MinePage | /shop/store |
## h5-partner 路由(刘景尧)
| 路由 | Page | 主要 API |
|------|------|----------|
| /login | LoginPage | /partner/auth/* |
| / | HomePage | /partner/dashboard |
| /stores | StoreListPage | /partner/stores |
| /stores/new | StoreCreatePage | /partner/stores |
| /stores/:id | StoreDetailPage | /partner/stores/:id |
| /orders | OrderListPage | /partner/orders |
| /orders/:id | OrderDetailPage | /partner/orders/:id |
| /center | CenterPage | /partner/me |
| /center/bills | BillsPage | /partner/settlement/* |
| /reshipments | ReshipPage | /partner/after-sales/reshipments |
| /reports/weekly | WeeklyReportPage | /partner/reports/weekly |
| /leaderboard | LeaderboardPage | /partner/dashboard/leaderboard |
| — | Mock 推进配送 | POST /partner/orders/:id/mock-advance-delivery |
## admin-web 路由(jacy-dukang
| 路由 | Page | 主要 API |
|------|------|----------|
| /login | LoginPage | /admin/auth/login |
| / | DashboardPage | /admin/dashboard |
| /users | UsersPage | /admin/users |
| /orders | OrdersPage | /admin/orders |
| /stores | StoresPage | /admin/stores |
| /store-accounts | StoreAccountsPage | /admin/store-accounts |
| /store-media | StoreMediaPage | /admin/store-media |
| /partners | PartnersPage | /admin/partners |
| /partner-accounts | PartnerAccountsPage | /admin/partner-accounts |
| /cities | CitiesPage | /admin/cities |
| /hq-accounts | HqAccountsPage | /admin/hq-accounts |
| /benefit/coupons | BenefitCouponsPage | /admin/benefit/coupons |
| /benefit/ledgers | BenefitLedgersPage | /admin/benefit/ledgers |
| /redeem-records | RedeemRecordsPage | /admin/redeem-records |
| /deliveries | DeliveriesPage | /admin/deliveries |
## 端 → API 前缀
| 端 | API 前缀 | NestJS Module |
|----|----------|---------------|
| C 端 | /auth, /user, /catalog, /trade, /benefit, /redeem, /stores | iam, catalog, trade, benefit, redeem, store |
| 门店 | /shop/auth, /shop/redeem, /shop/store | iam, redeem, store |
| 合伙人 | /partner/* | iam, store, trade, settlement |
| 总部 | /admin/* | iam, catalog, store, trade, settlement, ops |
## UI 硬约束
- C 端订单 **3 Tab**`pending_pay` / `paid` / `completed`
- 个人中心无会员等级(V1 不做会员体系)
- 清香型 4 SKU 可购;酱香/浓香灰态
- 门店列表仅 `OPEN` 状态
- 原型只读:`pages/{端}/*/code.html`,勿改原型目录
## preV1 与 V2 UI 差异
| 项 | preV1 | V2 |
|----|-------|-----|
| C/合伙人载体 | H5 | 微信小程序 |
| 总部 | admin-web 内部 | mini-hq 小程序 |
| 支付页 | Mock 同步成功 | 微信 JSAPI |
+94
View File
@@ -0,0 +1,94 @@
---
name: dukang-prev1
description: >-
Guides preV1 Mock integration phase for Dukang Haoke: H5 three-client setup,
MOCK_SMS/MOCK_PAY/MOCK_DELIVERY flags, Seed data, and V2 upgrade path.
Use when working on Mock providers, feature flags, preV1 task cards P1-*,
or smoke tests — not for V2 WeChat/payment production integration.
---
# 杜康好客 · preV1 Mock Skill
## 定位
preV1 = V2 之上的**裁剪实现**:**不删表、不删 API 路径、不改字段语义**。
权威文档:[`杜康好客-preV1编码手册.md`](../../杜康好客-preV1编码手册.md)
## 六条裁剪(必记)
1. **无 HQ 小程序**`admin-web` 内部替代;`/admin/*` 保留,前端不暴露 AdminAuth 给 C/B/D 端
2. **三端均 H5**`USER_H5` / `SHOP_H5` / `PARTNER_H5`
3. **无微信登录** → 仅 SMSwechat 路由返回 501 或 Flag 关闭
4. **验证码 Mock**`123456``MOCK_SMS=true`
5. **配送 Mock** → BullMQ 自动推进或合伙人 `mock-advance-delivery`
6. **支付 Mock**`POST /trade/orders/:id/pay` 同步成功 + **真实发券**
## 环境变量(`.env.example`
```bash
MOCK_SMS=true
MOCK_SMS_CODE=123456
MOCK_PAY=true
MOCK_DELIVERY_AUTO=true
AUTO_APPROVE_STORE=true
```
配置加载:`packages/shared-types/src/config.ts``loadAppConfig()`
## Mock 代码位置(禁止散落)
```
server/dukang-api/src/integrations/
├── sms/sms.interface.ts + sms.mock.provider.ts
├── pay/pay.interface.ts + pay.mock.provider.ts
└── delivery/delivery.interface.ts + delivery.mock.provider.ts
```
业务 Module 只 inject **interface**,由 Nest DI 切换 Mock/Real。
## preV1 必做 vs 跳过
| 必做 | 跳过(V2 补) |
|------|---------------|
| 三端 SMS 登录 | 微信登录/支付/退款 |
| Mock 支付 + 真实发券 | 微信 prepay/回调验签 |
| 5 Tab 订单 | HQ 小程序 UI |
| Redis 核销码 + 门店核销 | 真实小飞侠/物流 |
| 合伙人录店 + AUTO_APPROVE | 总部人工审核 UI |
| 可选埋点 | 推广码 HQ UI、T+30 真实打款 |
## HQ 能力替代(Seed
| V2 HQ | preV1 |
|-------|-------|
| 开城/商品 CRUD | Seed 固定 + admin-web 或改 seed |
| 门店审核 | AUTO_APPROVE_STORE=true |
| 退款/客服 | 跳过 |
| 结算 | store_payout PENDING;可 Seed 演示账单 |
Seed`server/dukang-api/prisma/seed-v31.ts`
## 测试账号
| 角色 | 手机号 |
|------|--------|
| C 端 | 13800000001 |
| 门店 | 13900000001 |
| 合伙人 | 13700000001 |
## 冒烟
```bash
node scripts/smoke-prev1.mjs
```
## preV1 → V2 切换检查
按 preV1 手册 §8.2 逐项关闭 Mock Flag**无需重构表结构**。
## 边界提醒
- preV1 skill **不负责**实现 V2 微信 SDK;遇到真实支付/短信需求 → 停止并切换 V2 手册 §九
- 改 Mock 行为时 **仍须** 遵守 OWNER 模块边界
- admin-web 是 preV1 内部工具,勿与 V2 `pages/hq/` 原型混为一谈
+69
View File
@@ -0,0 +1,69 @@
---
name: dukang-project
description: >-
Manages 杜康好客 PRD, requirements review, prototype mapping, and task card
planning. Use when writing PRD, reviewing requirements, mapping prototypes to
features, or splitting task cards. Not for daily coding (use @dukang-coding).
disable-model-invocation: true
---
# 杜康好客 · 项目/需求 Skill
## 何时启用
- 写或改 PRD、业务规则
- 评审需求、对照原型
- 拆分或规划任务卡
- 用户 @dukang-project
**不用于**:日常编码、修 Bug(用 @dukang-coding
## 文档阅读顺序
| 优先级 | 文档 | 用途 |
|--------|------|------|
| 1 | `杜康好客-v3-PRD.md` | **唯一需求事实源** |
| 2 | `杜康好客-v3-现状对照.md` | 已完成/冲突/缺口 |
| 3 | `杜康好客-v3编码手册.md` | 实现验收、分工 |
| 4 | `conventions.md` | 协作与模块边界 |
| 5 | V2 手册 §四 §五 §六 | 仅架构/DB/API 参考(与 V3 冲突时忽略) |
| 6 | `pages/{user,shop,partner,hq}/` | UI 参照 |
> V2 / preV1 **不再作为需求依据**。
## 需求变更规则
- **只改** `杜康好客-v3-PRD.md`;进度同步 `杜康好客-v3-现状对照.md`
- 编码 Agent **不得**边写代码边改业务规则
- 改 API/表结构 → 同步 v3-PRD + `packages/shared-types`
## 原型 → 模块映射
| 端 | 原型目录 | 主要 API 前缀 | NestJS Module |
|----|----------|---------------|---------------|
| C 端 | pages/user/ | /auth, /user, /catalog, /trade, /benefit, /redeem, /stores | iam, catalog, trade, benefit, redeem, store |
| 门店 | pages/shop/ | /shop/auth, /shop/redeem, /shop/store | iam, redeem, store |
| 合伙人 | pages/partner/ | /partner/* | iam, store, trade, settlement |
| 总部 | pages/hq/ | /admin/* | iam, catalog, store, trade, settlement, ops |
## 任务卡格式
- ID 格式:`Mx-LAYER-NNN`(如 `M2-BE-TRD-002`
- 任务卡全集:V2 手册 §七 附录 A
- preV1 任务卡:preV1 手册 §9
## 团队 OWNER
| OWNER | 前端 | 后端 Module |
|-------|------|-------------|
| A | h5-user | iam, trade, benefit, analytics |
| B | h5-partner | store |
| C | admin-web | catalog, settlement, ops |
| D | h5-shop | redeem |
| Lead | packages/* | callbacks, jobs, common |
## 输出要求
- 需求文档变更需标注影响模块与 Owner
- 新任务卡需含:PRD §、API 路径、DB 表、原型路径、验收标准
- 跨模块 PR 需相关双 Owner Review
+91
View File
@@ -0,0 +1,91 @@
---
name: dukang-release
description: >-
杜康好客发布流程:dev→测试(staging),main→生产;同机双栈。
Use when the user says 发布、上传、deploy、上线、发版、发测试、发生产,
or @杜康发布 / @dukang-release.
---
# 杜康发布
同机双栈:`/opt/dukang-staging`(测试)与 `/opt/dukang`(生产)。**仅用户明确要求发布时执行。**
## 分支与环境
| 分支 | 环境 | 目录 | 端口 | 域名 |
|------|------|------|------|------|
| `dev_jacy` | 日常开发 | 本机 | — | — |
| `dev` | **staging 测试** | `/opt/dukang-staging` | 81908194 | `*-test.dukanghaoke.com` |
| `main` | **production 生产** | `/opt/dukang` | 80908094 | `*.dukanghaoke.com` |
默认:`dev_jacy` → merge → `dev` → merge → `main`**发生产**。勿 force push `main`/`dev`
> **团队约定(2026-08)**:用户说「发布 / 发版 / 直接发版」且**未特别强调**时 → **发生产(production**。
> 仅当用户明确说「发测试 / staging / 测试环境」时 → 发 staging。
用户说「发生产 / 上线生产 / 发版」→ 用 `deploy-prod.sh`
用户说「发测试」→ 用 `deploy-staging.sh`
## 标准流程(Windows
PowerShell 下 **分支名必须加引号**
### A. 发测试(日常)
```powershell
# 1. 在 dev_jacy 提交(用户要求时)
git push -u origin HEAD
git checkout "dev"
git pull origin "dev"
git merge "dev_jacy" -m "merge(dev_jacy): <简述>"
git push origin "dev"
git checkout "dev_jacy"
# 2. 发 staging
& "C:\Program Files\Git\bin\bash.exe" "<repo>/deploy/deploy-staging.sh" -- --skip-db
```
### B. 发生产(验收后)
```powershell
git checkout "main"
git pull origin "main"
git merge "dev" -m "merge(dev): <简述>"
git push origin "main"
git checkout "dev_jacy"
& "C:\Program Files\Git\bin\bash.exe" "<repo>/deploy/deploy-prod.sh" -- --skip-db
```
- 默认加 `--skip-db`(无迁移时)
- 有 Prisma 迁移:先在 **staging** 跑通(可 `--seed` / `--accept-data-loss`),再生产去掉 `--skip-db`
- Staging 微信:正式号 + 全 Mock`.env.staging`
- `deploy/deploy.env` 提供 `DEPLOY_HOST``STAGING_APP_ROOT``PROD_APP_ROOT`(勿提交密钥)
### 首次启用 Staging
服务器一次性:`bash deploy/bootstrap-staging.sh`(见脚本说明)→ 配 `.env.staging` → DNS `*-test` → nginx → `deploy-staging.sh -- --seed`
### 同步环境变量
```powershell
bash deploy/sync-api-env.sh staging
bash deploy/sync-api-env.sh production
```
## 等待完成
- 出现 `发版完成`
- `exit_code: 0`
- `mini-user(h5): 200` / `api: 200`
## 回复用户
说明:环境(测试/生产)、commit、建议硬刷验证。测试后台有橙色「测试环境」条。
## 禁止
- 不 amend 已推送 commit;不 force push `main`/`dev`
- 不把 `.env*` 私钥打进仓库
- **禁止**再用 `dev` 直发生产
- 用户只说「修好」未说发布 → 只改代码,不发版
+94
View File
@@ -0,0 +1,94 @@
---
name: dukang-task-card
description: >-
Executes Dukang Haoke task cards (P1-M* or M0-M6) one at a time with DoD
verification. Use when the user provides a task ID like P1-M2-002 or M2-FE-U-003,
or asks to start/implement a milestone card from the coding manuals.
---
# 杜康好客 · 任务卡 Skill
## 原则
- **一次只做一个任务卡**
- 任务卡 ID 命名空间:`DLV-W*-*`V3.0)· `P1-*` / `M*-*`**历史,不再作验收依据**
- 需求变更只改 `杜康好客-v3-PRD.md`;进度查 `杜康好客-v3-现状对照.md`
## 领取流程
1. **解析 ID** → 确定里程碑与 OWNER
- `DLV-W1-M2``@dukang-v3` + [reference-waves.md](../dukang-v3/reference-waves.md)
- `P1-M2-002` → preV1 §9 + OWNER 见卡片内容
- `M2-BE-TRD-002` → V2 §七 附录 A
2. **读验收标准** → ACC-ID(V3)或手册中该 ID 的「验收」列
3. **读依赖** → REQ-ID、API 路径、DB 表、原型路径
4. **确认边界** → 只改 [`AGENTS.md`](../../AGENTS.md) OWNER 表内路径
5. **实现** → 配合 `dukang-coding` skill
6. **自验 DoD** → 下方清单
## OWNER 快速映射(2 人)
| 领域 | 负责人 | 典型 ID |
|------|--------|---------|
| C 端 FE、h5-user、交易后端 | jacy-dukang | P1-M1-002, M2-* |
| admin、catalog、settlement | jacy-dukang | M1-BE-CAT-* |
| 合伙人、store | 刘景尧 | P1-M4-001 |
| 门店核销、h5-shop | 刘景尧 | P1-M3-002 |
| Monorepo/integrations | jacy-dukang | P1-M0-* |
## preV1 任务卡(精简)
| ID | 验收要点 |
|----|----------|
| P1-M0-001 | 三端 `pnpm dev` 可编译 |
| P1-M0-003 | `pnpm db:validate` 通过 |
| P1-M0-004 | Seed 郑州+4SKU+测试账号 |
| P1-M1-001 | 123456 三端登录 |
| P1-M1-002 | C 端首页 4 款酒 |
| P1-M2-001 | 起购校验 2/6 瓶 |
| P1-M2-002 | Mock 支付发券 |
| P1-M2-003 | 5 Tab 含 pending_ship |
| P1-M3-001 | V3 两路径核销金额限制 |
| P1-M3-002 | 门店扫码核销 |
| P1-M4-001 | 录店 AUTO_APPROVE → C 端可见 |
| P1-M5-001 | 配送自动推进到 COMPLETED |
完整列表:preV1 手册 §9。
## 完成定义(每个任务卡)
```
- [ ] 验收列每一条可演示/可脚本验证
- [ ] 改动在 OWNER 路径内(跨模块需 inject Service + 双 OWNER 知晓)
- [ ] 新枚举/DTO → shared-types
- [ ] 纯规则 → domain + 单测(若涉及起购/权益/核销)
- [ ] API/表变更 → 同步 V2 手册 §五/§六
- [ ] pnpm lint 无新增错误
```
## V3.0 DLV 顺序(当前交付)
**Wave 1**DLV-W1-M1 → M2 → M3 → M4(门禁 W1-S1~S4
**Wave 2**DLV-W2-M1 → M2 → M3 → M4(门禁 W2-S1~S5
**Wave 3**DLV-W3-M1 → M2 → M3 → M4 → M5(全量 ACC
## 历史里程碑
**preV1**P1-M0 → … → P1-M6
**V2**:M0 → M1 → … → M6 → 上线
除非用户指定,默认从当前里程碑**下一个未完成**任务卡开始;不确定时先问用户或跑 smoke 判断进度。
## 输出格式(任务完成时)
```markdown
## 任务卡 {ID} 完成
**改动范围**:(路径列表)
**验收**:(逐条 ✓)
**未做/阻塞**:(如有,需其他 OWNER 配合的项)
**建议下一步**:(下一任务卡 ID
```
+119
View File
@@ -0,0 +1,119 @@
---
name: dukang-v3
description: >-
Manages 杜康好客 V3.0 PRD (v3-PRD), three-wave delivery (W1/W2/W3), REQ/ACC
IDs, and requirements review. Use when implementing V3.0 features, reviewing
PRD v1.3 scope, planning Wave gates, or user @dukang-v3. Not for preV1 Mock
(use @dukang-prev1) or daily coding alone (pair with @dukang-coding).
disable-model-invocation: true
---
# 杜康好客 · V3.0 需求 Skill
## 何时启用
- 读/改 V3.0 业务规则与交付范围
- 评审需求、对照 PRD REQ-ID / ACC-ID
- 规划或验收 Wave 1/2/3 门禁
- 用户 @dukang-v3 或提到「v3.0 PRD」「三波交付」「W1-S1」
**不用于**preV1 Mock 联调(@dukang-prev1)、纯编码实现(@dukang-coding
## 文档阅读顺序
| 优先级 | 文档 | 用途 |
|--------|------|------|
| 1 | [`杜康好客-v3-PRD.md`](../../../杜康好客-v3-PRD.md) | **唯一需求事实源** |
| 2 | [`杜康好客-v3-现状对照.md`](../../../杜康好客-v3-现状对照.md) | 已完成/冲突/缺口 |
| 3 | [`杜康好客-v3编码手册.md`](../../../杜康好客-v3编码手册.md) | 实现验收、分工 |
| 4 | [reference-waves.md](reference-waves.md) | Wave 门禁与 DLV 映射 |
| 5 | [reference-req-index.md](reference-req-index.md) | REQ-U/S/P/H 全表 |
| 6 | [reference-acc.md](reference-acc.md) | ACC 验收条件 |
| 7 | `pages/{user,shop,partner,hq}/` | UI 参照 |
> V2 / preV1 手册**不再作为需求依据**。
## V3.0 不可偏离常量
```
权益额 = 订单实付 1:1(永久)
同城起购 2 瓶 / 跨城 1 箱(6瓶)
门店结算 = 核销额 × 60%
单合伙人:订单佣金 + 核销佣金 ≤ 5%(默认 0% + 3%)
核销码 TTL = 3 分钟;试核销固定 ¥100
订单 Tab:待付款 | 已付款 | 已完成
C 端门店仅 status=OPEN 且审核通过
```
## 三波交付(严格顺序)
```
Wave 1 (7.10) → Wave 2 (7.15) → Wave 3 (7.22)
```
实现前**必须确认当前 Wave**;不得提前做后续 Wave 功能(除非用户明确要求)。
| Wave | 门禁 | 一句话 |
|------|------|--------|
| W1 | W1-S1~S4 | 下单+核销+拓店+合伙人子账号 |
| W2 | W2-S1~S5 | 提现+推广码+现场提货+门店子账号+多合伙人 |
| W3 | 全量 G1~G5 | 代下单+弱网+多仓+跨城+工单+发票+增长 |
详情:[reference-waves.md](reference-waves.md)
## 需求变更规则
- **只改** `杜康好客-v3-PRD.md` 作为 V3.0 业务事实源
- 同步 `杜康好客-v3编码手册.md` + `packages/shared-types` + `packages/domain`
- V2/preV1 与 V3.0 冲突时 **V3.0 PRD 优先**
- 编码 Agent 不得边写代码边改业务规则
## 原型 → 模块映射
| 端 | PRD 形态 | 当前代码 | 后端 Module |
|----|----------|----------|-------------|
| C 端 | 微信小程序 | `apps/h5-user`(过渡) | iam, catalog, trade, benefit |
| 门店 | H5 | `apps/h5-shop` | iam, redeem, store |
| 合伙人 | H5 | `apps/h5-partner` | iam, store, trade, settlement |
| 总部 | H5 | `apps/admin-web`(过渡) | catalog, store, trade, settlement, ops |
## 任务卡命名(V3.0
- **DLV-W{n}-M{m}**:阶段交付(如 `DLV-W1-M2`
- **REQ-{U|S|P|H}-{nnn}**:功能需求 ID
- **ACC-{nnn}** / **ACC-P{nn}** / **ACC-W{nn}**:验收 ID
- preV1 `P1-*` 与 V2 `M*-*` 为历史命名,V3.0 新任务以 DLV/REQ/ACC 为准
领取 DLV 任务时配合 `@dukang-coding` + 对应 Owner agent。
## 团队 OWNER2 人)
| 负责人 | 前端 | 后端 Module |
|--------|------|-------------|
| jacy-dukang | h5-user/mini-user, admin-web | iam, trade, benefit, catalog, settlement, ops, analytics |
| 刘景尧 | h5-shop, h5-partner | store, redeem |
## 需求评审输出格式
```markdown
## V3.0 需求评审 · {主题}
**关联**REQ-xxx / ACC-xxx / Wave N
**影响模块**:(NestJS module + app
**Owner**jacy-dukang | 刘景尧 | 双方
**与现状差异**:(代码/手册冲突点)
**建议任务**DLV-Wx-Mx
**阻塞/依赖**:(外部对接、前置 Wave
```
## 子 Agent 选用
| 场景 | Agent |
|------|-------|
| V3 波次统筹、跨 Wave 排期 | `v3-delivery-lead` |
| C 端下单/权益/支付 | `owner-a-user-trade` |
| 总部开城/结算/运营 | `owner-c-catalog-ops` |
| 合伙人拓店 | `owner-b-partner-store` |
| 门店核销 | `owner-d-shop-redeem` |
| packages/integrations/Prisma | `backend-lead` |
| PR 边界审查 | `boundary-reviewer` |
+72
View File
@@ -0,0 +1,72 @@
# V3.0 ACC 验收标准索引
> 事实源:[`杜康好客-v3-PRD.md`](../../../杜康好客-v3-PRD.md) §8
## 交易与履约
| ACC | 关联 | 验收条件 |
|-----|------|----------|
| ACC-001 | S1 | 访客可浏览;下单须登录;支付成功→权益 1:1 |
| ACC-002 | 同城 | ≥2 瓶免运费;小飞侠;取送拍照;24h 自动完成 |
| ACC-003 | 现场提货 | 隐藏入口;支付即完成;有码归码/无码归总部 |
| ACC-004 | 跨城 | 未开通城市≥1箱;总部物流到付;佣金归总部 |
| ACC-015 | 锁单 | 30 分钟取消;7 天免登 |
## 核销与门店账号
| ACC | 关联 | 验收条件 |
|-----|------|----------|
| ACC-005 | S2 | 扫码+手机号两通道;码/验证码 3 分钟;成功短信 |
| ACC-006 | 多店子账号 | W2:一号多店;主账号唯一;店员权限隔离 |
| ACC-006a | 门店登录 | 单店直达;多店含角色;记住所选 |
| ACC-017 | 弱网 | W1~2 重试+人工;W3 5次拍照兜底;不重复扣款 |
| ACC-017a | 弱网 SLA | W3:总部 T+0 处理;超时预警 |
## 拓店与 SOP
| ACC | 关联 | 验收条件 |
|-----|------|----------|
| ACC-007 | S3 | 合伙人三步提交;总部审;C 端营业中可见 |
| ACC-019 | SOP | 筛选字段;附件一一致;试核销100;负责人复核;合同同日 |
| ACC-020 | 结算细则 | T+1 顺延;异议3日;店内公示;签约主体 |
## 资金与佣金
| ACC | 关联 | 验收条件 |
|-----|------|----------|
| ACC-008 | S4 | 未出账可提;总部打款;FIN 护栏;T+0 审 |
| ACC-009 | 佣金 | 默认 0%+3%;门店结算×60%;§4.3 归属 |
| ACC-P21 | 多合伙人 | 区域区县互斥;全城唯一 |
| ACC-P22 | 佣金配置 | 独立配置;≤5%;快照 |
| ACC-P23 | 订单佣金 | 同城区县解析;余量归总部/全城 |
| ACC-P24 | 核销佣金 | 归门店归属合伙人;变更不溯及 |
| ACC-P25 | 独立账单 | T+30 独立确认打款 |
| ACC-P26 | 数据隔离 | 仅本管辖;推广员仅自己的店 |
| ACC-P27 | 推广码 | 绑定合伙人;现场有码归码 |
| ACC-P28 | 审计 | 管辖/比例/归属变更留痕 |
## 售后与增长
| ACC | 关联 | 验收条件 |
|-----|------|----------|
| ACC-010 | 工单 | 四类型;总部决策;补发/退款流转 |
| ACC-011 | 发票 | 四组合申请;2 工作日回传;可下载 |
| ACC-012 | 代下单 | W3:客户+合伙人双短信;手机号建用户(来源 PARTNER_PROXY);线下确认后已付款已完成并发权益;C 端展示代下单人 |
| ACC-013 | 问卷评价 | 成交问卷无激励;核销评价;总部可看 |
| ACC-014 | 推广分享 | 推广码归因;商品分享带渠道 |
| ACC-018 | 话术 | OPT-012 3 日内对齐 |
| ACC-021 | 热力图 | 腾讯位置服务按城市 |
## 多仓(Wave 3
| ACC | 关联 | 验收条件 |
|-----|------|----------|
| ACC-W01 | 多仓 | 同城多仓;启停 |
| ACC-W02 | 仓-合伙人 | 一仓一合伙人;未关联总部直管 |
| ACC-W03 | 管仓协同 | 管仓合伙人只读仓+工单协同 |
## UI 与隐私
| ACC | 关联 | 验收条件 |
|-----|------|----------|
| ACC-016 | UI/隐私 | §8 规范;按角色脱敏 |
@@ -0,0 +1,128 @@
# V3.0 REQ 需求索引
> 事实源:产品 PRD v1.3 → [`杜康好客-v3-PRD.md`](../../../杜康好客-v3-PRD.md)
## 用户端 REQ-U
| ID | 模块 | 结论摘要 |
|----|------|----------|
| REQ-U-001 | 导航 | 首页/门店/好客权益/个人中心 |
| REQ-U-002 | 登录 | 无感登录;下单提示绑定手机号(可选);微信/短信;7 天免登 |
| REQ-U-003 | 支付 | 仅微信支付 |
| REQ-U-004 | 定位 | 右上角市区;默认 IP;可授权精确定位 |
| REQ-U-005 | 首页商品 | 4 款酒祖杜康;大图、标题加粗、价格标红、权益金额 |
| REQ-U-006 | 商品详情 | 规格瓶/箱、度数、价格、权益、详情图 |
| REQ-U-007 | 同城 | 小飞侠;≥2 瓶免运费;物流节点+拍照;24h 自动完成 |
| REQ-U-008 | 现场提货 | 隐藏入口;支付即完成;强提示在现场 |
| REQ-U-009 | 跨城 | 未开通城市;≥1 箱;总部物流到付 |
| REQ-U-010 | 锁单 | 待付款 30 分钟取消 |
| REQ-U-011 | 权益 | 支付成功 1:1 永久 |
| REQ-U-012 | 客服 | 已付款起电话/微信客服 |
| REQ-U-013 | 门店列表 | 营业中;搜索;省市区筛选;立即核销 |
| REQ-U-014 | 门店详情 | 门头/电话/星级/地址/营业时间/规则/相册 |
| REQ-U-015 | 核销页 | 剩余总额;输入金额;码 3 分钟有效 |
| REQ-U-016 | 规则弹窗 | 核销前展示(OPT-011) |
| REQ-U-017 | 评价 | 核销后引导门店评价 |
| REQ-U-018 | 权益页 | 待使用总额;Tab 待使用/已使用;明细 |
| REQ-U-019 | 个人中心 | 手机号、权益总额、订单入口 |
| REQ-U-020 | 订单 | 待付款/已付款/已完成;物流时间线 |
| REQ-U-021 | 发票 | 四组合;总部 2 工作日回传(OPT-001) |
| REQ-U-022 | 工单 | 四类型;客服引导建单 |
| REQ-U-023 | 问卷 | 支付成功引导;无激励(OPT-004) |
| REQ-U-024 | 推广码 | 扫码归因;现场提货有码归码 |
| REQ-U-025 | 分享 | 微信商品分享+渠道参数 |
| REQ-U-026 | 门店规则 | 附件一完整展示 |
| REQ-U-027 | 门店套餐 **3.4.10** | 门店详情展示生效套餐;套餐异议申诉入口 |
## 门店端 REQ-S
| ID | 模块 | 结论摘要 |
|----|------|----------|
| REQ-S-001 | 导航 | 首页/核销记录/门店信息 |
| REQ-S-002 | 登录 | 主账号/店员;§4.6 流程;7 天免登 |
| REQ-S-003 | 多店 | 一号多店选店(Wave 2) |
| REQ-S-004 | 扫码核销 | 大按钮;确认即成功 |
| REQ-S-005 | 手机号核销 | 查余额→用户验证码→确认 |
| REQ-S-006 | 短信 | 核销中/成功文案 |
| REQ-S-007 | 今日汇总 | 首页今日核销总金额 |
| REQ-S-008 | 弱网 | W1~2 重试;W3 §4.8 |
| REQ-S-008a | 弱网弹窗 | W3 拍照兜底文案 |
| REQ-S-009 | 核销记录 | 筛今日/7日/1月/全部;到账×60% |
| REQ-S-010 | 门店信息 | 营业状态;结算入口;切换门店 |
| REQ-S-011 | 结算信息 | T+1;核销额/结算额/状态 |
| REQ-S-012 | 提现 | 未出账可提(Wave 2);FIN 护栏 |
| REQ-S-013 | 提现记录 | 待审/已打款/驳回 |
| REQ-S-014 | 结算异议 | 3 工作日 |
| REQ-S-015 | 店内公示 | 模板下载 |
| REQ-S-016 | 提现护栏 | 白名单/单日上限提示 |
| REQ-S-017 | 子账号 | 创建/停用店员(Wave 2) |
| REQ-S-018 | 权限 | §4.6 矩阵 |
| REQ-S-019 | 多店选店 | 记住上次所选 |
| REQ-S-020 | 待处理核销 | Wave 3 弱网单 |
| REQ-S-021 | 门店套餐 **3.4.10** | 套餐列表/编辑/提审 |
## 合伙人端 REQ-P
| ID | 模块 | 结论摘要 |
|----|------|----------|
| REQ-P-001 | 导航 | 首页/门店管理/合伙人中心 |
| REQ-P-002 | 登录 | 7 天免登 |
| REQ-P-003 | 推广员 | 菜单裁剪;仅本管辖范围 |
| REQ-P-004 | 管理员 | 完整能力 |
| REQ-P-005 | 子账号 | 管理员·推广员 |
| REQ-P-006 | 门店管理 | 筛审核/营业/区县/创建人 |
| REQ-P-007 | 列表字段 | 名称/地址/状态/录入 |
| REQ-P-008 | 一号多店 | 创建时二次确认 |
| REQ-P-009 | 创建三步 | 基础/证照+附件一/结算 |
| REQ-P-010 | 编辑规则 | 待审可改;通过后改资料再审 |
| REQ-P-011 | 试核销 | 100 元激活(OPT-009 |
| REQ-P-012 | 入驻短信 | OPT-008 |
| REQ-P-013 | 首页数据 | GMV/核销/订单三卡 |
| REQ-P-014 | 功能区 | 子账号/订单/权益/工单/代下单 |
| REQ-P-015 | 排行 | 核销/订单 Top10 |
| REQ-P-016 | 订单管理 | 筛时间状态 |
| REQ-P-017 | 订单详情 | 佣金快照下钻 |
| REQ-P-018 | 好客权益 | 送出/已核销/待核销 |
| REQ-P-019 | 工单 | 只读 |
| REQ-P-020 | 财务对账 | 本合伙人月账 |
| REQ-P-021 | 代下单 | Wave 3 |
| REQ-P-022 | 筛选校验 | 不达标标黄 |
| REQ-P-023 | 附件一 | 结构化录入 |
| REQ-P-024 | 负责人复核 | 待复核→待总部审 |
| REQ-P-025 | 合同同日 | 同日提交校验 |
| REQ-P-026 | 我的仓库 | Wave 3 管仓只读 |
| REQ-P-027 | 门店套餐 **3.4.10** | 拓店套餐页;门店套餐列表/编辑/提审 |
## 总部端 REQ-H
| ID | 模块 | 结论摘要 |
|----|------|----------|
| REQ-H-001 | 登录 | 权限账户;7 天免登 |
| REQ-H-002 | 商品 | 增删改;上下架排序 |
| REQ-H-003 | 营销 | 1:1 权益永久 |
| REQ-H-004 | 开通城市 | 省/市/配送/是否开通 |
| REQ-H-004a | 创建合伙人 | 全城/区域+佣金;W3 管仓 |
| REQ-H-004b | 仓库 | Wave 3 多仓 |
| REQ-H-005 | 门店管理 | +归属合伙人筛选 |
| REQ-H-006 | 门店审核 | 通过/失败;改归属 |
| REQ-H-007 | 管辖佣金 | 区县全覆盖校验 |
| REQ-H-008 | 订单 | 全量+佣金快照 |
| REQ-H-009 | 权益 | 全量+合伙人筛 |
| REQ-H-010 | 工单 | 同意/拒绝+备注+日志 |
| REQ-H-011 | 发票 | 2 工作日;上传回传 |
| REQ-H-012 | 代下单 | 同合伙人 |
| REQ-H-013 | 结算 | 门店+合伙人双 Tab |
| REQ-H-014 | 提现审 | T+0FIN-003 |
| REQ-H-014a | 白名单 | FIN-001/002 |
| REQ-H-015 | 合伙人账单 | 待确认/待打款 |
| REQ-H-016 | 报表 | 城市/合伙人/区县+热力图 |
| REQ-H-017 | 推广码 | 绑定合伙人+统计 |
| REQ-H-018 | 问卷 | 回收看板 |
| REQ-H-019 | 门店评价 | 查看数据 |
| REQ-H-020 | 核销异常 | W1~2 人工;W3 列表 |
| REQ-H-020a | 待处理核销审 | W3 补核销/驳回 |
| REQ-H-021 | 话术 | OPT-012 |
| REQ-H-022 | 签约主体 | 山西领势酒业 |
| REQ-H-023 | 热力图 | 腾讯位置服务 |
| REQ-H-024 | 结算异议 | 门店 3 日异议处理 |
| REQ-H-025 | 门店套餐 **3.4.10** | 门店详情套餐 Tab 直存;套餐变更审核通过/驳回 |
+109
View File
@@ -0,0 +1,109 @@
# V3.0 三波交付参考
> 事实源:[`杜康好客-v3-PRD.md`](../../../杜康好客-v3-PRD.md) §9
## Wave 1 — 核心交易 + 拓店(2026-07-10
### 门禁
| 门禁 | 能力 | ACC |
|------|------|-----|
| W1-S1 | 用户下单支付,权益 1:1 到账 | ACC-001 |
| W1-S2 | 门店核销(扫码 + 手机号) | ACC-005、OPT-007、OPT-011 |
| W1-S3 | 合伙人子账号 | REQ-P-005 |
| W1-S4 | 合伙人创建门店 → 总部审核 → C 端可见 | ACC-007、OPT-009、OPT-008 |
### 纳入
四端登录 7 天免登、商品、**同城**下单支付、小飞侠履约、出码/扫码/手机号核销、规则弹窗、合伙人子账号、门店三步录入、负责人复核、总部审核、试核销 100 元、登录短信。
### 不含
提现/打款、推广码、现场提货、代下单、弱网拍照、多合伙人、门店子账号、**跨城**、工单、发票。
### DLV 拆分
| ID | 内容 |
|----|------|
| DLV-W1-M1 | 四端登录、权限、UI Token、商品管理/展示 |
| DLV-W1-M2 | 支付、锁单 30 分、同城小飞侠、权益 1:1 |
| DLV-W1-M3 | 出码/扫码/手机号核销、规则弹窗 OPT-011 |
| DLV-W1-M4 | 合伙人子账号、门店三步、负责人复核、审核、试核销 OPT-009、短信 OPT-008 |
### Wave 1 弱网/代下单 SOP
- 弱网:重试 + 总部人工补核销(OPT-006 完整版在 W3)
- 代下单:运营人工 SOP(系统能力在 W3 OPT-002
---
## Wave 2 — 资金 + 品鉴会 + 组织扩展(2026-07-15
### 门禁
| 门禁 | 能力 | ACC |
|------|------|-----|
| W2-S1 | 未出账可手动提现 + FIN 护栏 | ACC-008、OPT-010、FIN-001~003 |
| W2-S2 | 总部审核打款 | REQ-H-014 |
| W2-S3 | 推广码 + 现场提货 | ACC-003/014、OPT-005 |
| W2-S4 | 门店主子账号 + 一号多店选店 | REQ-S-017~019、ACC-006 |
| W2-S5 | 多合伙人管辖/佣金/数据隔离 | ACC-P21~P28 |
### 不含
代下单、弱网 5 次拍照、一城多仓、跨城、工单、发票、问卷、热力图。
### DLV 拆分
| ID | 内容 |
|----|------|
| DLV-W2-M1 | T+1 出账、未出账提现 OPT-010 + FIN、总部审打款 |
| DLV-W2-M2 | 现场提货 OPT-005、推广码 REQ-H-017 |
| DLV-W2-M3 | 多合伙人 REQ-H-004a/007、区县互斥、佣金快照 |
| DLV-W2-M4 | 门店子账号 REQ-S-017~019、多店选店 |
---
## Wave 3 — 旁路 + 弱网 + 本期全量(2026-07-22
### 门禁
| 门禁 | 能力 | ACC |
|------|------|-----|
| W3-S1 | 代下单(总部/合伙人) | ACC-012、OPT-002 |
| W3-S2 | 弱网 5 次拍照兜底 + 总部补核销 | ACC-017、OPT-006 |
| W3-S3 | 一城多仓 + 合伙人管仓 | ACC-W01~W03 |
| W3-S4 | 跨城、工单、发票、合伙人 T+30 对账、问卷/评价/热力图 | G5、OPT-001/003/004/012 |
### 完成定义
G1G5 + OPT-001012 + 门店签约 SOP S1S12 全部勾选。
### DLV 拆分
| ID | 内容 |
|----|------|
| DLV-W3-M1 | 代下单 OPT-002 |
| DLV-W3-M2 | 弱网 OPT-006 完整版 |
| DLV-W3-M3 | 多仓、跨城、工单 OPT-003、发票 OPT-001 |
| DLV-W3-M4 | 合伙人月账、问卷/评价/热力图、OPT-012 |
| DLV-W3-M5 | ACC 全量回归 |
---
## OPT 波次对照
| OPT | 名称 | 波次 |
|-----|------|------|
| OPT-001 | 发票 | W3 |
| OPT-002 | 代下单 | W3 |
| OPT-003 | 工单 | W3 |
| OPT-004 | 问卷 | W3 |
| OPT-005 | 现场提货 | W2 |
| OPT-006 | 弱网兜底 | W3W1~2 简化版) |
| OPT-007 | 手机号核销 | W1 |
| OPT-008 | 入驻成功短信 | W1 |
| OPT-009 | 试核销 100 元 | W1 |
| OPT-010 | 未出账提现 | W2 |
| OPT-011 | 核销规则弹窗 | W1 |
| OPT-012 | 话术对齐 | W3 |