add training configuration APIs
This commit is contained in:
@@ -11,6 +11,9 @@ from app.services.runtime_memory import runtime_memory
|
||||
class OrderService:
|
||||
"""检查检验服务:提供可申请项目和数据库固定结果返回。"""
|
||||
|
||||
PHYSICAL_TYPES = {"physical", "physical_exam", "inspection", "palpation", "percussion", "auscultation"}
|
||||
PHYSICAL_KEYWORDS = ("体格", "体征", "查体", "听诊", "叩诊", "触诊")
|
||||
|
||||
def __init__(self, db: Session) -> None:
|
||||
self.db = db
|
||||
self.case_repo = CaseRepository(db)
|
||||
@@ -20,6 +23,30 @@ class OrderService:
|
||||
"""检查项目列表:按会话病例返回可申请项目,不返回结果。"""
|
||||
session = self._get_session(session_id, user_id)
|
||||
items = self.case_repo.get_exam_items(session.case_id)
|
||||
return self._items_response(items)
|
||||
|
||||
def list_physical_exam_items(self, session_id: int, user_id: str) -> OrderItemsResponse:
|
||||
"""体格检查列表:从当前病例检查项中筛选体格检查类项目。"""
|
||||
session = self._get_session(session_id, user_id)
|
||||
items = [item for item in self.case_repo.get_exam_items(session.case_id) if self._is_physical_item(item)]
|
||||
return self._items_response(items)
|
||||
|
||||
def list_auxiliary_exam_items(self, session_id: int, user_id: str) -> OrderItemsResponse:
|
||||
"""辅助检查列表:从当前病例检查项中筛选非体格检查类项目。"""
|
||||
session = self._get_session(session_id, user_id)
|
||||
items = [item for item in self.case_repo.get_exam_items(session.case_id) if not self._is_physical_item(item)]
|
||||
return self._items_response(items)
|
||||
|
||||
def create_physical_exam_order(self, session_id: int, user_id: str, item_code: str) -> CreateOrderResponse:
|
||||
"""体格检查结果:复用检查申请逻辑,结果仍只来自数据库。"""
|
||||
return self.create_order(session_id, user_id, item_code)
|
||||
|
||||
def create_auxiliary_exam_order(self, session_id: int, user_id: str, item_code: str) -> CreateOrderResponse:
|
||||
"""辅助检查结果:复用检查申请逻辑,结果仍只来自数据库。"""
|
||||
return self.create_order(session_id, user_id, item_code)
|
||||
|
||||
def _items_response(self, items) -> OrderItemsResponse:
|
||||
"""检查列表响应:把 ORM 检查项转换成前端列表结构。"""
|
||||
return OrderItemsResponse(
|
||||
items=[
|
||||
OrderItemResponse(item_code=item.item_code, item_name=item.item_name, item_type=item.item_type)
|
||||
@@ -27,6 +54,14 @@ class OrderService:
|
||||
]
|
||||
)
|
||||
|
||||
def _is_physical_item(self, item) -> bool:
|
||||
"""检查分类:按 item_type 和 category 识别体格检查,其他归入辅助检查。"""
|
||||
item_type = (item.item_type or "").lower()
|
||||
category = item.category or ""
|
||||
if item_type in self.PHYSICAL_TYPES:
|
||||
return True
|
||||
return any(keyword in category or keyword in item.item_name for keyword in self.PHYSICAL_KEYWORDS)
|
||||
|
||||
def create_order(self, session_id: int, user_id: str, item_code: str) -> CreateOrderResponse:
|
||||
"""检查申请:从数据库读取检查结果并写入当前会话记录。"""
|
||||
session = self._get_session(session_id, user_id)
|
||||
|
||||
Reference in New Issue
Block a user