fs-lawrisk/CHANGELOG_V2_FIX.md

170 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# V2 API 许可证名称匹配和审批部门显示修复总结
## 提交信息
- **Commit**: 60b94d8
- **日期**: 2025-12-23
- **类型**: feat (新功能)
## 问题描述
### 1. 许可证名称匹配问题
用户查询"药品经营许可"时,系统无法直接匹配到数据库中的"药品经营许可证"导致触发LLM而不是直接数据库查询。
### 2. 审批部门显示问题
查询"营业执照"时,返回的 `unit_name` 字段为 `null`,即使已经导入了审批部门数据。
## 根本原因
1. **严格的精确匹配**: `find_permit_contexts_by_name` 只支持完全相同的名称匹配
2. **缺失的数据表**: `permit_approval_departments` 表不存在
3. **错误的SQL语法**: 模糊匹配使用了 `||` 连接符,在某些数据库中不兼容
4. **缺少数据**: 即使表存在,也没有审批部门映射数据
## 解决方案
### 1. 许可证名称前缀匹配 (licensing_repo.py)
**修改函数**: `find_permit_contexts_by_name`
```python
# 添加前缀匹配逻辑
if not rows and len(permit_name) >= 2:
sql_fuzzy = """
SELECT ... FROM ... WHERE p.name LIKE %s
"""
cur.execute(sql_fuzzy, (permit_name + "%",))
rows = cur.fetchall()
```
**效果**:
- "药品经营许可" 现在可以匹配 "药品经营许可证"
- "营业执照" 可以匹配 "营业执照(副本)"等
### 2. 审批部门表自动创建 (licensing_repo.py)
**新增函数**:
- `_create_permit_approval_departments_schema()`: 创建表结构
- `_ensure_permit_approval_departments_schema()`: 确保表存在
**表结构**:
```sql
CREATE TABLE IF NOT EXISTS permit_approval_departments (
id uuid PRIMARY KEY,
permit_name text NOT NULL,
department_name text NOT NULL,
created_at timestamptz NOT NULL DEFAULT now(),
updated_at timestamptz NOT NULL DEFAULT now()
)
```
### 3. 修复SQL JOIN逻辑 (licensing_repo.py)
**修改前**:
```sql
LEFT JOIN permit_approval_departments pad
ON (pad.permit_name = p.name OR p.name LIKE pad.permit_name || '%')
```
**修改后**:
```sql
LEFT JOIN permit_approval_departments pad
ON (p.name = pad.permit_name OR p.name LIKE CONCAT(pad.permit_name, '%'))
```
**改进**:
- 使用 `CONCAT()` 函数,兼容性更好
- 支持精确匹配和前缀匹配
### 4. 新增管理API端点 (v2.py)
**端点**: `POST /fs-ai-asistant/api/workflow/lawrisk/admin/approval-departments/setup`
**功能**:
- 自动插入常见的审批部门映射
- 支持更新已存在的映射
- 返回操作统计信息
**预置映射**:
- 营业执照 → 市场监管部门
- 食品经营许可证 → 市场监管部门
- 药品经营许可证 → 市场监管部门
- 医疗器械经营许可证 → 市场监管部门
- 特种设备使用登记 → 市场监管部门
### 5. 更新 .gitignore
**新增规则**:
```gitignore
# 临时脚本
analyze_*.py
final_importer.py
ultimate_importer.py
*_importer.py
# Excel文件除模板外
*.xlsx
!样表.xlsx
```
## 文件变更
### 修改的文件
1. `lawrisk/services/licensing_repo.py` (+1200行)
- 新增审批部门表管理
- 修复许可证名称匹配逻辑
- 修复SQL JOIN语法
2. `lawrisk/api/v2.py` (+89行)
- 新增审批部门设置API端点
3. `.gitignore` (+9行)
- 添加临时文件忽略规则
4. `docs/API_V2.md` (更新)
- 文档更新
5. `static/db_admin.html` (更新)
- 前端界面调整
## 测试验证
### 测试场景1: 前缀匹配
**输入**: "药品经营许可"
**预期**: 直接返回"药品经营许可证"的数据不触发LLM
**结果**: ✅ 通过
### 测试场景2: 审批部门显示
**输入**: "营业执照"
**预期**: `unit_name` 返回 "市场监管部门"
**结果**: ✅ 通过
### 测试场景3: 精确匹配优先
**输入**: "营业执照"(数据库中存在完全相同的名称)
**预期**: 优先返回精确匹配结果
**结果**: ✅ 通过
## 影响范围
### 正面影响
1. ✅ 提升用户体验减少不必要的LLM调用
2. ✅ 提高响应速度直接数据库查询比LLM快
3. ✅ 降低成本减少LLM API调用
4. ✅ 数据完整性:审批部门信息正确显示
### 潜在风险
1. ⚠️ 前缀匹配可能返回多个结果(已通过精确匹配优先缓解)
2. ⚠️ 需要定期维护审批部门映射表
## 后续建议
1. **数据维护**: 定期更新 `permit_approval_departments`
2. **监控**: 监控前缀匹配的准确率
3. **扩展**: 考虑添加同义词匹配功能
4. **文档**: 更新API文档说明新的匹配逻辑
## 相关链接
- Commit: 60b94d8
- 相关Issue: V2 API Search Logic
- 测试环境: http://127.0.0.1:5000