Ver código fonte

docs(story): 更新故事008.006的API调用信息,添加银行卡、备注、回访信息数据结构

- 添加银行卡、备注、回访信息的数据结构定义
- 更新数据验证逻辑说明
- 添加聚合API的RPC调用方式
- 添加聚合数据结构说明
- 更新API支持检查结果

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
yourname 1 dia atrás
pai
commit
20416269f9

+ 99 - 17
docs/stories/008.006.transplant-disability-person-management-ui.story.md

@@ -321,10 +321,63 @@ In Progress - 需要实现银行卡、备注、回访信息组件
   }
   ```
 
-- **照片验证逻辑**(来自`AggregatedService`):
-  - 验证`fileId`的有效性(检查文件是否存在)
-  - 照片必须包含有效的文件ID
-  - 自动为照片添加`fileUrl`字段(从文件模块获取)
+- **银行卡数据结构**(来自`DisabledBankCardSchema`):
+  ```typescript
+  {
+    id?: number;           // 银行卡ID(创建时可选)
+    personId?: number;     // 残疾人ID(创建时可选)
+    subBankName: string;   // 发卡支行
+    bankName: string;      // 银行名称
+    cardNumber: string;    // 卡号
+    cardholderName: string; // 持卡人姓名
+    fileId: number;        // **银行卡照片文件ID**(引用@d8d/file-module)
+    isDefault: number;     // 是否默认:1-是,0-否
+  }
+  ```
+
+- **备注数据结构**(来自`DisabledRemarkSchema`):
+  ```typescript
+  {
+    id?: number;           // 备注ID(创建时可选)
+    personId?: number;     // 残疾人ID(创建时可选)
+    remarkContent: string; // 备注内容
+    isSpecialNeeds: number; // 是否特殊需求:1-是,0-否
+    operatorId: number;    // 操作人ID
+    remarkTime?: Date;     // 备注时间(创建时自动生成)
+  }
+  ```
+
+- **回访数据结构**(来自`DisabledVisitSchema`):
+  ```typescript
+  {
+    id?: number;           // 回访ID(创建时可选)
+    personId?: number;     // 残疾人ID(创建时可选)
+    visitDate: Date;       // 回访日期
+    visitType: string;     // 回访类型
+    visitContent: string;  // 回访内容
+    visitResult?: string;  // 回访结果(可选)
+    nextVisitDate?: Date;  // 下次回访日期(可选)
+    visitorId: number;     // 回访人ID
+    visitTime?: Date;      // 记录时间(创建时自动生成)
+  }
+  ```
+
+- **数据验证逻辑**(来自`AggregatedService`):
+  - **照片验证**:
+    - 验证`fileId`的有效性(检查文件是否存在)
+    - 照片必须包含有效的文件ID
+    - 自动为照片添加`fileUrl`字段(从文件模块获取)
+  - **银行卡验证**:
+    - 验证银行卡照片`fileId`的有效性
+    - 确保只有一个默认银行卡(`isDefault: 1`)
+    - 验证银行卡号格式
+  - **备注验证**:
+    - 验证备注内容不能为空
+    - 自动设置`remarkTime`为当前时间
+  - **回访验证**:
+    - 验证回访日期不能晚于当前日期
+    - 验证回访内容不能为空
+    - 自动设置`visitTime`为当前时间
 
 - **照片上传流程**(新系统):
   1. 通过`FileSelector`上传到文件模块,获取`fileId`
@@ -333,19 +386,42 @@ In Progress - 需要实现银行卡、备注、回访信息组件
   4. 响应中包含`fileUrl`(从文件模块获取)
 
 ### 残疾人模块RPC API调用信息(基于集成测试和路由定义)
-- **RPC客户端调用方式**(来自`allin-packages/disability-module/tests/integration/disability.integration.test.ts`和`allin-packages/disability-module/src/routes/disabled-person-custom.routes.ts`):
-  - `disabilityClientManager.get().createDisabledPerson.$post({ json: personData })` - 创建残疾人记录
-  - `disabilityClientManager.get().updateDisabledPerson.$post({ json: personData })` - 更新残疾人记录
-  - `disabilityClientManager.get().deleteDisabledPerson.$post({ json: { id } })` - 删除残疾人记录
-  - `disabilityClientManager.get().getDisabledPersonList.$get({ query: { page, pageSize, filters, sortBy, sortOrder } })` - 获取残疾人列表(分页)
-  - `disabilityClientManager.get().getDisabledPersonById.$get({ query: { id } })` - 获取残疾人详情
-
-- **API路径映射**(来自`allin-packages/disability-module/src/routes/disabled-person-custom.routes.ts`):
-  - `POST /createDisabledPerson` → `disabilityClientManager.get().createDisabledPerson.$post`
-  - `POST /updateDisabledPerson` → `disabilityClientManager.get().updateDisabledPerson.$post`
-  - `POST /deleteDisabledPerson` → `disabilityClientManager.get().deleteDisabledPerson.$post`
-  - `GET /getDisabledPersonList` → `disabilityClientManager.get().getDisabledPersonList.$get`
-  - `GET /getDisabledPersonById` → `disabilityClientManager.get().getDisabledPersonById.$get`
+- **RPC客户端调用方式**(来自`allin-packages/disability-module/tests/integration/disability.integration.test.ts`和路由定义):
+  - **基本CRUD API**:
+    - `disabilityClientManager.get().createDisabledPerson.$post({ json: personData })` - 创建残疾人记录(仅基本信息)
+    - `disabilityClientManager.get().updateDisabledPerson.$post({ json: personData })` - 更新残疾人记录(仅基本信息)
+    - `disabilityClientManager.get().deleteDisabledPerson.$post({ json: { id } })` - 删除残疾人记录
+    - `disabilityClientManager.get().getDisabledPersonList.$get({ query: { page, pageSize, filters, sortBy, sortOrder } })` - 获取残疾人列表(分页)
+    - `disabilityClientManager.get().getDisabledPersonById.$get({ query: { id } })` - 获取残疾人详情(仅基本信息)
+
+  - **聚合API**(包含银行卡、照片、备注、回访信息):
+    - `disabilityClientManager.get().createAggregatedDisabledPerson.$post({ json: aggregatedData })` - **聚合创建残疾人所有信息**
+    - `disabilityClientManager.get().getAggregatedDisabledPerson[':id']['$get']({ param: { id } })` - **聚合查询残疾人所有信息**
+    - `disabilityClientManager.get().updateAggregatedDisabledPerson[':id']['$put']({ json: aggregatedData, param: { id } })` - **聚合更新残疾人所有信息**
+
+- **API路径映射**:
+  - **基本CRUD API**(来自`disabled-person-custom.routes.ts`):
+    - `POST /createDisabledPerson` → `disabilityClientManager.get().createDisabledPerson.$post`
+    - `POST /updateDisabledPerson` → `disabilityClientManager.get().updateDisabledPerson.$post`
+    - `POST /deleteDisabledPerson` → `disabilityClientManager.get().deleteDisabledPerson.$post`
+    - `GET /getDisabledPersonList` → `disabilityClientManager.get().getDisabledPersonList.$get`
+    - `GET /getDisabledPersonById` → `disabilityClientManager.get().getDisabledPersonById.$get`
+
+  - **聚合API**(来自`aggregated.routes.ts`):
+    - `POST /createAggregatedDisabledPerson` → `disabilityClientManager.get().createAggregatedDisabledPerson.$post`
+    - `GET /getAggregatedDisabledPerson/{id}` → `disabilityClientManager.get().getAggregatedDisabledPerson[':id']['$get']`
+    - `PUT /updateAggregatedDisabledPerson/{id}` → `disabilityClientManager.get().updateAggregatedDisabledPerson[':id']['$put']`
+
+- **聚合数据结构**(`CreateAggregatedDisabledPersonSchema`):
+  ```typescript
+  {
+    personInfo: CreateDisabledPersonSchema,  // 残疾人基本信息
+    bankCards?: DisabledBankCardSchema[],    // 银行卡信息数组(可选)
+    photos?: DisabledPhotoSchema[],          // 照片信息数组(可选)
+    remarks?: DisabledRemarkSchema[],        // 备注信息数组(可选)
+    visits?: DisabledVisitSchema[]           // 回访信息数组(可选)
+  }
+  ```
 
 - **残疾人数据字段**(来自`allin-packages/disability-module/src/schemas/disabled-person.schema.ts`):
   - `name: string` - 姓名
@@ -457,6 +533,12 @@ Claude Code (d8d-model)
    - ✅ 检查Schema定义:已确认有银行卡、备注、回访信息Schema
    - ✅ 检查聚合API:已确认支持银行卡、备注、回访信息的创建、查询、更新
    - ✅ 检查服务层实现:aggregated.service.ts已支持银行卡、备注、回访信息处理
+   - ✅ 检查RPC API定义:**没有独立的银行卡、备注、回访信息API**,所有相关数据通过聚合API处理
+   - ✅ 检查前端API客户端:已包含聚合API的类型定义(`CreateAggregatedDisabledPersonRequest`、`GetAggregatedDisabledPersonResponse`等)
+   - ✅ **API调用方式**:
+     - 创建:`disabilityClientManager.get().createAggregatedDisabledPerson.$post({ json: aggregatedData })`
+     - 查询:`disabilityClientManager.get().getAggregatedDisabledPerson[':id']['$get']({ param: { id } })`
+     - 更新:`disabilityClientManager.get().updateAggregatedDisabledPerson[':id']['$put']({ json: aggregatedData, param: { id } })`
 
 10. **待实现功能**:
     - ⚠️ **银行卡管理组件**:需要创建`BankCardManagement.tsx`组件,支持多个银行卡管理、银行卡照片上传、默认银行卡设置