# PRD to Tech Doc Schema
# 将需求文档（PRD）转换为技术文档
# 工件流: analysis → tech-design → tech-tasks

name: prd-to-tech-doc
description: |
  需求文档转技术文档工作流。
  输入一份业务需求文档（PRD），输出结构化的技术设计文档和实施任务清单。
  适用于：已有功能需求文档，需要转化为开发团队可执行的技术方案。

  与 mes-crud-module 的区别：
  - mes-crud-module：从零生成 CRUD 模块代码（模板化）
  - prd-to-tech-doc：从需求文档出发，分析现有代码，产出技术方案（定制化）

apply:
  requires:
    - tech-tasks    # 实施前必须完成所有工件

artifacts:
  - id: analysis
    name: 需求分析
    description: 解析 PRD，识别功能点、影响范围和技术约束
    requires: []
    template: analysis.md
    instruction: |
      读取用户提供的需求文档（PRD），完成以下分析：

      1. 功能点提取
         - 从 PRD 中提取所有功能点，编号列出
         - 区分：CRUD 操作 / 业务规则 / 导入导出 / 状态流转 等类型
         - 标注每个功能点的优先级（P0=必须 / P1=重要 / P2=可选）

      2. 数据模型分析
         - 根据 PRD 中的字段说明，推断数据库表结构
         - 识别：实体名、表名、字段列表、字段类型、约束
         - 识别外键关系（如有关联表）
         - 标注审计字段（created_by, created_date, last_updated_by, last_updated_date）

      3. 现有代码扫描
         - 搜索项目中是否已有相关代码（实体、表、接口、页面）
         - 如果已有：标注哪些可以直接复用，哪些需要修改
         - 如果没有：标注需要新建
         - 使用 codegraph_explore 查找相关符号

      4. 技术约束识别
         - 项目技术栈约束（Spring Boot 2.7 / MyBatis-Plus / Oracle / Vue2 / ViewUI）
         - 编码规范约束（BaseModel 继承、ResponseWrapper 响应、LambdaQueryWrapper 等）
         - 与现有模块的集成点（如本功能被哪些模块消费）

      5. 影响范围
         - 受影响的后端模块（modules-center 下的哪个 center）
         - 受影响的前端目录（views/ 和 api/ 下的路径）
         - 受影响的数据库 schema

      输出格式：结构化的分析报告，包含以上 5 个部分。
    output: analysis.md

  - id: tech-design
    name: 技术设计
    description: 数据库设计 + API 设计 + 代码结构设计 + 业务逻辑流程
    requires: [analysis]
    template: tech-design.md
    instruction: |
      基于需求分析报告，生成完整的技术设计文档。

      1. 数据库设计
         - 表结构 DDL（Oracle 语法）
         - 字段类型映射规则：
           - 文本 → VARCHAR2(n)
           - 数字（整数）→ NUMBER(19) 或 NUMBER(10)
           - 数字（小数）→ NUMBER(19,4)
           - 日期 → DATE 或 TIMESTAMP
           - 开关 → NUMBER(1) DEFAULT 1
         - 主键: id NUMBER(19) 雪花算法（ASSIGN_ID）
         - 审计字段: created_by, created_date, last_updated_by, last_updated_date
         - 索引建议
         - 如使用 dbx MCP 工具，优先通过 dbx 建表

      2. API 接口设计
         - 接口清单表（Method / Path / 描述 / 请求体 / 响应体）
         - MES 项目标准接口模式：
           - POST /{entity}/search — 分页查询（PageForm<Entity>）
           - POST /{entity}/add — 新增（或 POST /{entity}/save 统一保存）
           - PUT /{entity}/update — 修改
           - DELETE /{entity}/delete — 批量删除
           - POST /{entity}/export — Excel 导出
           - POST /{entity}/uploadExcel — Excel 导入（如有）
         - 响应统一使用 ResponseWrapper<T>
         - 每个接口给出请求示例和响应示例（JSON）

      3. 后端代码结构
         - Entity 类设计（继承 BaseModel，字段注解）
         - Mapper 接口 + XML 设计（resultMap/resultType、查询条件）
         - Service 接口设计（方法签名、返回值）
         - ServiceImpl 关键逻辑（校验、唯一性、事务）
         - Controller 设计（路径、方法、参数校验）
         - 给出每个类的关键代码模板

      4. 前端代码结构
         - API 文件（src/api/{domain}/{entity}.js）
         - 列表页（index.vue — search-table + indexPage mixin）
         - 表单页（{entity}-form.vue — master-sub + Form）
         - 给出关键配置（表格列定义、表单字段、校验规则）

      5. 业务逻辑流程
         - 用流程图（ASCII）描述核心业务流程
         - 标注校验点和异常处理
         - 如有状态流转，画出状态机

      6. 集成点
         - 本模块被哪些其他模块调用
         - 需要暴露哪些 Feign 接口
         - 需要注册哪些菜单权限

      注意：
      - 代码模板必须匹配 MES 项目的真实编码规范
      - 实体继承 BaseModel，使用 @Data + @TableName
      - Mapper XML 位于 resources/mapper/{module}/ 目录
      - 前端组件使用 View Design 4 组件库
    output: tech-design.md

  - id: tech-tasks
    name: 实施任务
    description: 可执行的技术实施任务清单（SDD 引擎可逐个执行）
    requires: [analysis, tech-design]
    template: tech-tasks.md
    instruction: |
      基于技术设计文档，拆分为可执行的实施任务列表。

      任务拆分原则：
      1. 每个任务足够小（2-5 分钟完成）
      2. 包含精确的文件路径
      3. 包含完整的代码或明确的修改指令
      4. 包含验证步骤
      5. 任务之间尽量独立（便于 SDD 并行）

      任务顺序约定：
      1. 数据库建表（DDL）
      2. 后端 Entity
      3. 后端 Mapper + XML
      4. 后端 Service 接口
      5. 后端 ServiceImpl
      6. 后端 Controller
      7. 前端 API 文件
      8. 前端列表页
      9. 前端表单页
      10. 菜单注册 SQL

      每个任务格式：
      - [ ] Task N: <标题>
        文件: <精确路径>
        描述: <具体实现指令，包含代码模板>
        验证: <如何验证>
        依赖: Task-X（如有）

      注意：
      - 如果需求文档中有导入功能，增加 uploadExcel 相关任务
      - 如果需求文档中有导出功能，增加 export 相关任务
      - 如果有状态流转，增加状态操作接口任务
      - 使用 dbx MCP 建表时，在建表任务中标注
    output: tech-tasks.md
