|
@@ -82,8 +82,11 @@ import logging
|
|
|
|
|
|
|
|
|
from .service.search_service import SearchBusiness
|
|
|
-logger = logging.getLogger(__name__)
|
|
|
+from .utils.MedicalRecordParser import MedicalRecordParser
|
|
|
+from pydantic import BaseModel
|
|
|
+from typing import Optional
|
|
|
|
|
|
+logger = logging.getLogger(__name__)
|
|
|
|
|
|
# 1. 疾病与症状相关接口
|
|
|
class SymptomDiseasesRequest(BaseModel):
|
|
@@ -597,6 +600,69 @@ async def get_relations(
|
|
|
logger.error(f"获取概念关系失败: {str(e)}")
|
|
|
raise HTTPException(500, detail=StandardResponse.error(str(e)))
|
|
|
|
|
|
+# @app.post("/parse_medical_record",
|
|
|
+# response_model=StandardResponse,
|
|
|
+# operation_id="parseMedicalRecord",
|
|
|
+# summary="病历文本结构化",
|
|
|
+# description="""将病历文本解析为结构化数据。
|
|
|
+#
|
|
|
+# 该接口主要用于医疗病历处理场景,例如:
|
|
|
+# - 将非结构化的病历文本转换为结构化JSON数据
|
|
|
+# - 提取病历中的关键医疗信息
|
|
|
+# - 辅助临床决策支持系统
|
|
|
+#
|
|
|
+# 典型应用场景:
|
|
|
+# 1. 电子病历系统:将医生书写的病历文本结构化存储
|
|
|
+# 2. 临床研究:从病历中提取标准化数据用于分析
|
|
|
+# 3. 医疗AI:为自然语言处理模型提供结构化输入
|
|
|
+#
|
|
|
+# 输入要求:
|
|
|
+# - 病历文本应为中文医疗记录
|
|
|
+# - 包含完整的病历信息(主诉、现病史等)
|
|
|
+#
|
|
|
+# 输出格式:
|
|
|
+# - 返回标准JSON响应
|
|
|
+# - 包含结构化后的病历数据""",
|
|
|
+# response_description="""返回标准响应格式,包含结构化后的病历数据。
|
|
|
+#
|
|
|
+# 成功响应示例:
|
|
|
+# {
|
|
|
+# "success": true,
|
|
|
+# "data": {
|
|
|
+# "病历基本信息": {
|
|
|
+# "就诊日期": "2023-05-10",
|
|
|
+# "就诊科室": "心血管内科",
|
|
|
+# "门诊类型": "初诊"
|
|
|
+# },
|
|
|
+# "患者信息": {
|
|
|
+# "性别": "男",
|
|
|
+# "年龄": "45岁"
|
|
|
+# }
|
|
|
+# }
|
|
|
+# }
|
|
|
+#
|
|
|
+# 错误响应示例:
|
|
|
+# {
|
|
|
+# "success": false,
|
|
|
+# "error": "Invalid medical record text"
|
|
|
+# }"""
|
|
|
+# )
|
|
|
+# async def parse_medical_record(
|
|
|
+# record_text: str = Query(...,
|
|
|
+# description="""病历文本内容。
|
|
|
+#
|
|
|
+# 该参数应为完整的病历文本,包含主诉、现病史等关键部分。
|
|
|
+# 示例值:"患者男性,45岁,主诉胸闷3天...""",
|
|
|
+# examples=["患者男性,45岁,主诉胸闷3天,加重1天..."]
|
|
|
+# )):
|
|
|
+# try:
|
|
|
+# parser = MedicalRecordParser()
|
|
|
+# result = parser.parse_medical_record(record_text)
|
|
|
+# return StandardResponse(success=True, data=result)
|
|
|
+# except Exception as e:
|
|
|
+# logger.error(f"病历解析失败: {str(e)}")
|
|
|
+# raise HTTPException(500, detail=StandardResponse.error(str(e)))
|
|
|
+
|
|
|
|
|
|
@app.post("/get_similar_concepts",
|
|
|
response_model=StandardResponse,
|
|
@@ -809,66 +875,68 @@ async def suggest_appropriate_department(
|
|
|
# validate_type: str
|
|
|
#
|
|
|
#
|
|
|
-@app.post("/medical/validate_record", response_model=StandardResponse, operation_id="validateMedicalRecord",
|
|
|
- summary="验证病历内容的逻辑一致性",
|
|
|
- description="""根据输入的病历内容,验证其逻辑一致性并返回验证结果。
|
|
|
-
|
|
|
-该接口主要用于医疗病历质控场景,例如:
|
|
|
-- 验证诊断与症状的相关性
|
|
|
-- 检查病历中的逻辑矛盾
|
|
|
-- 确保病历符合医疗规范
|
|
|
-
|
|
|
-典型应用场景:
|
|
|
-1. 病历自动质控:输入病历内容获取验证结果
|
|
|
-2. 临床决策支持:验证诊断与症状的匹配度
|
|
|
-3. 病历完整性检查:确保病历包含必要信息
|
|
|
|
|
|
-输入要求:
|
|
|
-- 病历内容应为标准医疗文本
|
|
|
-
|
|
|
-输出格式:
|
|
|
-- 返回标准JSON响应
|
|
|
-- 包含验证结果和错误列表""",
|
|
|
- response_description="""返回标准响应格式,包含验证结果。
|
|
|
-
|
|
|
-成功响应示例:
|
|
|
-{
|
|
|
- "success": true,
|
|
|
- "data": {
|
|
|
- "errors": [
|
|
|
- "初步诊断'胆总管结石伴胆管炎'与主诉症状不相关",
|
|
|
- "初步诊断'胆囊结石并胆囊炎'与主诉症状不相关"
|
|
|
- ]
|
|
|
- }
|
|
|
-}
|
|
|
|
|
|
-错误响应示例:
|
|
|
-{
|
|
|
- "success": false,
|
|
|
- "error": "Invalid medical content"
|
|
|
-}""")
|
|
|
-async def validate_medical_record(
|
|
|
- medical_content: str = Query(...,
|
|
|
- description="""病历内容文本,应为标准医疗术语。
|
|
|
-
|
|
|
-该参数用于验证病历的逻辑一致性。
|
|
|
-必须使用标准医学术语。
|
|
|
-示例值:"患者主诉头痛3天,初步诊断:高血压病""",
|
|
|
- min_length=10)
|
|
|
-):
|
|
|
- try:
|
|
|
- # 调用search_service中的验证方法
|
|
|
- search = SearchBusiness()
|
|
|
- results = search.validate_medical_record(medical_content)
|
|
|
- #只返回errors字段
|
|
|
- results = results["errors"]
|
|
|
- return StandardResponse(success=True, data=results)
|
|
|
- except ValueError as e:
|
|
|
- logger.warning(f"无效的病历内容: {medical_content}")
|
|
|
- raise HTTPException(400, detail=StandardResponse.error(str(e)))
|
|
|
- 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, operation_id="validateMedicalRecord",
|
|
|
+# summary="验证病历内容的逻辑一致性",
|
|
|
+# description="""根据输入的病历内容,验证其逻辑一致性并返回验证结果。
|
|
|
+#
|
|
|
+# 该接口主要用于医疗病历质控场景,例如:
|
|
|
+# - 验证诊断与症状的相关性
|
|
|
+# - 检查病历中的逻辑矛盾
|
|
|
+# - 确保病历符合医疗规范
|
|
|
+#
|
|
|
+# 典型应用场景:
|
|
|
+# 1. 病历自动质控:输入病历内容获取验证结果
|
|
|
+# 2. 临床决策支持:验证诊断与症状的匹配度
|
|
|
+# 3. 病历完整性检查:确保病历包含必要信息
|
|
|
+#
|
|
|
+# 输入要求:
|
|
|
+# - 病历内容应为标准医疗文本
|
|
|
+#
|
|
|
+# 输出格式:
|
|
|
+# - 返回标准JSON响应
|
|
|
+# - 包含验证结果和错误列表""",
|
|
|
+# response_description="""返回标准响应格式,包含验证结果。
|
|
|
+#
|
|
|
+# 成功响应示例:
|
|
|
+# {
|
|
|
+# "success": true,
|
|
|
+# "data": {
|
|
|
+# "errors": [
|
|
|
+# "初步诊断'胆总管结石伴胆管炎'与主诉症状不相关",
|
|
|
+# "初步诊断'胆囊结石并胆囊炎'与主诉症状不相关"
|
|
|
+# ]
|
|
|
+# }
|
|
|
+# }
|
|
|
+#
|
|
|
+# 错误响应示例:
|
|
|
+# {
|
|
|
+# "success": false,
|
|
|
+# "error": "Invalid medical content"
|
|
|
+# }""")
|
|
|
+# async def validate_medical_record(
|
|
|
+# medical_content: str = Query(...,
|
|
|
+# description="""病历内容文本,应为标准医疗术语。
|
|
|
+#
|
|
|
+# 该参数用于验证病历的逻辑一致性。
|
|
|
+# 必须使用标准医学术语。
|
|
|
+# 示例值:"患者主诉头痛3天,初步诊断:高血压病""",
|
|
|
+# min_length=10)
|
|
|
+# ):
|
|
|
+# try:
|
|
|
+# # 调用search_service中的验证方法
|
|
|
+# search = SearchBusiness()
|
|
|
+# results = search.validate_medical_record(medical_content)
|
|
|
+# #只返回errors字段
|
|
|
+# results = results["errors"]
|
|
|
+# return StandardResponse(success=True, data=results)
|
|
|
+# except ValueError as e:
|
|
|
+# logger.warning(f"无效的病历内容: {medical_content}")
|
|
|
+# raise HTTPException(400, detail=StandardResponse.error(str(e)))
|
|
|
+# except Exception as e:
|
|
|
+# logger.error(f"病历验证失败: {str(e)}")
|
|
|
+# raise HTTPException(500, detail=StandardResponse.error(str(e)))
|
|
|
|
|
|
|
|
|
mcp = FastApiMCP(app)
|