SGTY il y a 3 jours
Parent
commit
eab4800cb5

+ 13 - 11
src/knowledge/main.py

@@ -473,17 +473,19 @@ class DepartmentRequest(BaseModel):
 #     validate_type: str
 #
 #
-# @app.post("/medical/validate_record", response_model=StandardResponse)
-# async def validate_medical_record(
-#         request: MedicalRecordRequest,
-#         db: Session = Depends(get_db)
-# ):
-#     try:
-#         # 实现病历验证的逻辑
-#         return StandardResponse(success=True, data=[])
-#     except Exception as e:
-#         logger.error(f"病历验证失败: {str(e)}")
-#         raise HTTPException(500, detail=StandardResponse.error(str(e)))
+@app.post("/medical/validate_record", response_model=StandardResponse)
+async def validate_medical_record(
+        medical_content: str = Query(...,
+                                    description="""病历信息""")
+):
+    try:
+        # 调用search_service中的验证方法
+        search = SearchBusiness()
+        results = search.validate_medical_record(medical_content)
+        return StandardResponse(success=True, data=results)
+    except Exception as e:
+        logger.error(f"病历验证失败: {str(e)}")
+        raise HTTPException(500, detail=StandardResponse.error(str(e)))
 
 
 mcp = FastApiMCP(app)

+ 4 - 2
src/knowledge/router/medical_knowledge_api.py

@@ -366,8 +366,10 @@ async def validate_medical_record(
     db: Session = Depends(get_db)
 ):
     try:
-        # 实现病历验证的逻辑
-        return StandardResponse(success=True, data=[])
+        # 调用search_service中的验证方法
+        search = SearchBusiness()
+        results = search.validate_medical_record(request.medical_record, request.validate_type)
+        return StandardResponse(success=True, data=results)
     except Exception as e:
         logger.error(f"病历验证失败: {str(e)}")
         raise HTTPException(500, detail=StandardResponse.error(str(e)))

+ 33 - 1
src/knowledge/service/search_service.py

@@ -112,7 +112,7 @@ class SearchBusiness:
         processed_disease_ids = set()
         simplified_diseases = []
         # 获取症状节点ID
-        symptom_nodes = self.search_nodes(name=symptom_name, type="症状")
+        symptom_nodes = self.search_nodes(name=symptom_name, type="症状", limit=100)
         if not symptom_nodes:
             return simplified_diseases
 
@@ -300,6 +300,38 @@ class SearchBusiness:
         ]
 
         return {"similar_concepts": similar_concepts}
+        
+    def validate_medical_record(self, medical_record: str, validate_type: str) -> dict:
+        """
+        验证病历数据
+        :param medical_record: 病历数据字典
+        :param validate_type: 验证类型
+        :return: 验证结果字典
+        """
+        try:
+            # 基本验证逻辑
+            if not medical_record:
+                return {"valid": False, "errors": ["病历数据为空"]}
+                
+            # 根据验证类型进行不同验证
+            if validate_type == "completeness":
+                # 检查病历完整性
+                required_fields = ["patient_name", "diagnosis", "treatment"]
+                missing_fields = [field for field in required_fields if field not in medical_record]
+                if missing_fields:
+                    return {"valid": False, "errors": [f"缺少必填字段: {', '.join(missing_fields)}"]}
+                
+            elif validate_type == "consistency":
+                # 检查病历一致性
+                if "diagnosis" in medical_record and "symptoms" in medical_record:
+                    # 这里可以添加更复杂的诊断与症状一致性检查逻辑
+                    pass
+                
+            return {"valid": True, "errors": []}
+            
+        except Exception as e:
+            logger.error(f"病历验证失败: {str(e)}")
+            return {"valid": False, "errors": [f"验证过程中发生错误: {str(e)}"]}
 
 
 if __name__ == "__main__":