소스 검색

docs(spec): 自审修正 - 复用既有reportDate/collection_date逻辑、迁移编号起点356、API_REFERENCE同步规范

iwt 3 일 전
부모
커밋
f0ff9eb6d7
1개의 변경된 파일과 6개의 추가작업 그리고 4개의 파일을 삭제
  1. 6 4
      docs/superpowers/specs/2026-10-09-indicator-change-curve-design.md

+ 6 - 4
docs/superpowers/specs/2026-10-09-indicator-change-curve-design.md

@@ -80,7 +80,8 @@
 - PDF 解析阶段(`PdfParseService` / LangGraph `report_parse_agent.py`)新增提取「报告日期 / 采样日期」→ `payload.reportDate`
 - 入库时 `health_reports.report_date` 优先使用真实日期,缺失回退上传时间
 - 历史回填任务:扫描 `report_date` 缺失或为上传时间的旧报告,从其 `payload_json` / 存储 PDF 中重新提取真实日期并回填;**幂等可重跑**;无法提取的置 NULL(不伪装成上传时间)
-- ⚠️ 实现前先确认 `health_indicators.collection_date` 列在数据库真实存在(实体注释标注「DB列不存在」),若确实缺失先补迁移
+- **复用既有入口**:`HealthReportService` 已有 reportDate 修正逻辑(约 1749 行,读 `payload.reportDate` → `yyyy-MM-dd` 解析 → `setReportDate`),新提取只负责把真实日期写入 `payload.reportDate`,入库逻辑复用
+- `health_indicators.collection_date` **已存在于 schema.sql(1868 行)**,无需补列;实施时仅需确认生产库同样存在(用 `ensureColumn` 兜底)
 
 ### 4.2 `indicator_definitions` 扩展
 
@@ -392,7 +393,8 @@ body: { subjectId, definitionId }
 
 | 层 | 文件 | 操作 | 内容 |
 |---|---|---|---|
-| 后端 | `config/DatabaseInitializer.java` | 改 | 迁移:definitions/values 加列 + 索引 + 唯一键;新建 mapping_rules/correlations 两表;report_date 真实日期回填;确认/修复 health_indicators.collection_date;种子映射导入(迁移编号递增查找) |
+| 后端 | `config/DatabaseInitializer.java` | 改 | 迁移:definitions/values 加列 + 索引 + 唯一键;新建 mapping_rules/correlations 两表;report_date 真实日期回填;collection_date 已存在(schema.sql 1868 行)用 ensureColumn 兜底生产库;种子映射导入(当前最新迁移编号 355,从 356 起递增) |
+| 后端 | `docs/superpowers/api/API_REFERENCE.md` | 改 | 新增接口前查重、新增后同步记录(trend/change-ranking/quick-lookup/correlation + 管理端 5 接口) |
 | 后端 | `resources/schema.sql` | 改 | 同步 4 处 DDL |
 | 后端 | `entity/IndicatorDefinition.java` / `IndicatorValue.java` | 改 | 新字段 |
 | 后端 | `entity/IndicatorMappingRule.java` / `entity/IndicatorCorrelation.java` | 新建 | 新实体 |
@@ -401,7 +403,7 @@ body: { subjectId, definitionId }
 | 后端 | `service/NormalizeIndicatorPipeline.java` | 新建 | 解析后钩子,幂等写 indicator_values |
 | 后端 | `service/IndicatorTrendService.java` | 新建 | trend / change-ranking / quick-lookup |
 | 后端 | `service/IndicatorCorrelationService.java` | 新建 | 关联 CRUD + effective_strength + Spearman 校准 |
-| 后端 | `service/ReportDateExtractor.java` | 新建 | PDF/payload 真实日期提取 + 回填 |
+| 后端 | `service/ReportDateExtractor.java` | 新建 | PDF/payload 真实日期提取(写入 `payload.reportDate` 后复用 HealthReportService 既有入库逻辑)+ 历史回填 |
 | 后端 | `controller/IndicatorController.java` | 新建 | /api/indicator/*(4 个视图接口) |
 | 后端 | `controller/admin/IndicatorCorrelationAdminController.java` / `IndicatorMappingAdminController.java` | 新建 | 管理端接口 |
 | 后端 | `service/FoodRecommendService.java` | 改 | recalculateForUser 后增写 indicator_values |
@@ -434,7 +436,7 @@ body: { subjectId, definitionId }
 
 ## 12. 实现顺序(分期)
 
-1. **P1 后端数据层**:迁移(4 处 DDL + report_date 回填 + collection_date 确认)→ 实体/Mapper/Service → `mvn clean compile`
+1. **P1 后端数据层**:迁移(4 处 DDL + report_date 回填,collection_date 已存在仅兜底)→ 实体/Mapper/Service → `mvn clean compile`
 2. **P2 归一化管道**:`IndicatorMappingService` + `NormalizeIndicatorPipeline` + 食物钩子 + 种子导入 → 幂等验证
 3. **P3 视图 API**:trend / change-ranking / quick-lookup(含五维七维小节)+ correlation/list → `mvn clean compile`
 4. **P4 小程序页面**:`TrendChart` → 曲线页 → 速查页 → 菌群详情「变化」区块 → pages.json / api.js → HBuilderX 打包人工验证