diff --git a/server/src/app/schemas/user_agent.py b/server/src/app/schemas/user_agent.py index f0ef4ac..c124a94 100644 --- a/server/src/app/schemas/user_agent.py +++ b/server/src/app/schemas/user_agent.py @@ -32,6 +32,7 @@ class UserAgentDraftPayload(BaseModel): claim_id: str | None = Field(default=None, description="关联的报销草稿 ID。") claim_no: str | None = Field(default=None, description="关联的报销草稿单号。") status: str | None = Field(default=None, description="当前报销草稿状态。") + approval_stage: str | None = Field(default=None, description="当前审批节点。") class UserAgentQueryStatusGroup(BaseModel): diff --git a/server/src/app/services/user_agent.py b/server/src/app/services/user_agent.py index 6970e06..40a29eb 100644 --- a/server/src/app/services/user_agent.py +++ b/server/src/app/services/user_agent.py @@ -599,23 +599,34 @@ class UserAgentService: subject = self._resolve_subject(payload) claim_no = str(payload.tool_payload.get("claim_no") or "").strip() or None claim_status = str(payload.tool_payload.get("status") or "").strip() or None + approval_stage = str(payload.tool_payload.get("approval_stage") or "").strip() or None + is_submitted = claim_status == "submitted" title = f"{scenario_label}处理意见草稿" if claim_no: - title = f"{scenario_label}草稿 {claim_no}" - body = ( - f"主题:{subject}\n" - "结论:已根据当前语义解析结果生成草稿,尚未自动执行。\n" - "建议:请先核对明细、规则命中和所需附件,再由人工确认是否提交正式流程。\n" - f"原始问题:{payload.message}" - ) + title = f"{scenario_label}{'报销单' if is_submitted else '草稿'} {claim_no}" + if is_submitted: + body = ( + f"主题:{subject}\n" + f"结论:报销单已提交审批,当前节点为 {approval_stage or '审批中'}。\n" + "建议:后续可在个人报销列表中跟踪审批进度,必要时再补充说明或附件。\n" + f"原始问题:{payload.message}" + ) + else: + body = ( + f"主题:{subject}\n" + "结论:已根据当前语义解析结果生成草稿,尚未自动执行。\n" + "建议:请先核对明细、规则命中和所需附件,再由人工确认是否提交正式流程。\n" + f"原始问题:{payload.message}" + ) return UserAgentDraftPayload( draft_type=payload.ontology.scenario, title=title, body=body, - confirmation_required=True, + confirmation_required=not is_submitted, claim_id=str(payload.tool_payload.get("claim_id") or "").strip() or None, claim_no=claim_no, status=claim_status, + approval_stage=approval_stage, ) def _build_suggested_actions( @@ -1161,6 +1172,11 @@ class UserAgentService: ) return "已按您当前确认的信息保存为草稿。后续您可以继续补充缺失项,或修改识别结果后再继续提交。" if review_action == "next_step": + if draft_payload is not None and draft_payload.status == "submitted": + stage_text = draft_payload.approval_stage or "审批中" + return f"报销单 {draft_payload.claim_no or ''} 已提交审批,当前节点为 {stage_text}。".strip() + if payload.tool_payload.get("submission_blocked"): + return str(payload.tool_payload.get("message") or "").strip() or "当前报销单暂时还不能提交审批。" return ( f"{self._build_review_intent_summary(payload, slot_cards=review_payload.slot_cards, claim_groups=review_payload.claim_groups)} " "当前关键信息已基本齐全,您确认无误后可以继续下一步。"