feat: 报销预审会话状态管理与工作台交互增强
- 新增差旅报销会话状态管理与对话模型重构 - 增强风险观测服务与运行时聊天上下文作用域 - 优化工作台图标资源、助理意图识别与摘要工具 - 完善报销创建视图样式与差旅详情页标准调整交互 - 补充风险观测、运行时聊天与报销端点测试覆盖
This commit is contained in:
@@ -113,6 +113,53 @@ def seed_claim(db: Session) -> tuple[ExpenseClaim, ExpenseClaimItem]:
|
||||
return claim, item
|
||||
|
||||
|
||||
def test_claim_standard_adjustment_endpoint_recalculates_and_marks_reviewer_notice() -> None:
|
||||
client, session_factory = build_client()
|
||||
with session_factory() as db:
|
||||
claim, item = seed_claim(db)
|
||||
claim.expense_type = "hotel"
|
||||
claim.location = "北京"
|
||||
claim.amount = Decimal("1000.00")
|
||||
item.item_type = "hotel_ticket"
|
||||
item.item_reason = "北京住宿"
|
||||
item.item_location = "北京"
|
||||
item.item_amount = Decimal("1000.00")
|
||||
db.commit()
|
||||
claim_id = claim.id
|
||||
item_id = item.id
|
||||
|
||||
response = client.post(
|
||||
f"/api/v1/reimbursements/claims/{claim_id}/standard-adjustment",
|
||||
json={
|
||||
"risks": [
|
||||
{
|
||||
"risk_id": "risk-hotel-endpoint-1",
|
||||
"item_id": item_id,
|
||||
"title": "住宿超标待说明",
|
||||
"risk": "住宿票据金额超过职级标准。",
|
||||
"application_days": 2,
|
||||
"original_amount": "1000.00",
|
||||
"reimbursable_amount": "1000.00",
|
||||
}
|
||||
]
|
||||
},
|
||||
headers={"x-auth-username": "emp-1", "x-auth-name": "Zhang San", "x-auth-grade": "P4"},
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
payload = response.json()
|
||||
assert payload["amount"] == "900.00"
|
||||
standard_flag = next(
|
||||
flag
|
||||
for flag in payload["risk_flags_json"]
|
||||
if isinstance(flag, dict) and flag.get("source") == "reimbursement_standard_adjustment"
|
||||
)
|
||||
assert standard_flag["original_amount"] == "1000.00"
|
||||
assert standard_flag["reimbursable_amount"] == "900.00"
|
||||
assert standard_flag["employee_absorbed_amount"] == "100.00"
|
||||
assert standard_flag["visibility_scope"] == "leader"
|
||||
|
||||
|
||||
def test_claim_item_attachment_upload_preview_and_delete(monkeypatch, tmp_path) -> None:
|
||||
def fake_recognize(
|
||||
self,
|
||||
|
||||
Reference in New Issue
Block a user