chore(backend): update config and user agent schema

- core/config.py: update application configuration
- schemas/user_agent.py: update user agent data schemas
This commit is contained in:
caoxiaozhu
2026-05-13 15:29:25 +00:00
parent 14379c4e59
commit de51ed2e9f
2 changed files with 54 additions and 0 deletions

View File

@@ -71,6 +71,10 @@ class Settings(BaseSettings):
ocr_timeout_seconds: int = Field(default=180, alias="OCR_TIMEOUT_SECONDS")
ocr_max_file_size_mb: int = Field(default=20, alias="OCR_MAX_FILE_SIZE_MB")
ocr_language: str = Field(default="ch", alias="OCR_LANGUAGE")
seed_demo_financial_records: bool = Field(
default=False,
alias="SEED_DEMO_FINANCIAL_RECORDS",
)
ocr_text_detection_model: str = Field(
default="PP-OCRv5_mobile_det",
alias="OCR_TEXT_DETECTION_MODEL",

View File

@@ -34,6 +34,52 @@ class UserAgentDraftPayload(BaseModel):
status: str | None = Field(default=None, description="当前报销草稿状态。")
class UserAgentQueryStatusGroup(BaseModel):
key: str = Field(description="状态分组键名。")
label: str = Field(description="状态分组展示名。")
count: int = Field(default=0, ge=0, description="该分组单据数。")
class UserAgentExpenseQueryRecord(BaseModel):
claim_id: str = Field(description="报销单主键。")
claim_no: str = Field(description="报销单号。")
employee_name: str = Field(default="", description="申请人。")
expense_type: str = Field(default="", description="费用类型编码。")
expense_type_label: str = Field(default="", description="费用类型中文名。")
amount: float = Field(default=0.0, ge=0.0, description="金额。")
status: str = Field(default="", description="单据状态编码。")
status_label: str = Field(default="", description="单据状态中文名。")
status_group: str = Field(default="", description="状态分组编码。")
status_group_label: str = Field(default="", description="状态分组中文名。")
approval_stage: str | None = Field(default=None, description="审批节点。")
document_date: str = Field(default="", description="用于近 10 日展示的单据日期。")
occurred_at: str = Field(default="", description="业务发生日期。")
reason: str = Field(default="", description="事由。")
location: str = Field(default="", description="地点。")
class UserAgentQueryPayload(BaseModel):
result_type: str = Field(default="expense_claim_list", description="结构化查询结果类型。")
scope_label: str = Field(default="报销单", description="当前查询范围名。")
recent_window_applied: bool = Field(default=False, description="是否应用了近 10 日窗口。")
window_days: int | None = Field(default=None, ge=1, description="近 N 日窗口天数。")
window_start_date: str | None = Field(default=None, description="近 N 日窗口开始日期。")
window_end_date: str | None = Field(default=None, description="近 N 日窗口结束日期。")
record_count: int = Field(default=0, ge=0, description="当前展示范围内的单据数。")
preview_count: int = Field(default=0, ge=0, description="当前返回的单据数。")
older_record_count: int = Field(default=0, ge=0, description="超出近 10 日窗口的单据数。")
has_more_in_window: bool = Field(default=False, description="当前展示范围内是否还有更多单据未返回。")
total_amount: float = Field(default=0.0, ge=0.0, description="当前展示范围内金额合计。")
status_groups: list[UserAgentQueryStatusGroup] = Field(
default_factory=list,
description="当前展示范围内的状态分组统计。",
)
records: list[UserAgentExpenseQueryRecord] = Field(
default_factory=list,
description="当前返回的单据列表。",
)
class UserAgentReviewRiskBrief(BaseModel):
title: str = Field(description="风险或注意事项标题。")
level: str = Field(default="info", description="级别,例如 info / warning / high。")
@@ -159,6 +205,10 @@ class UserAgentResponse(BaseModel):
default_factory=list,
description="建议的下一步动作。",
)
query_payload: UserAgentQueryPayload | None = Field(
default=None,
description="结构化查询结果,用于前端渲染真实单据列表。",
)
draft_payload: UserAgentDraftPayload | None = Field(default=None, description="可选草稿内容。")
review_payload: UserAgentReviewPayload | None = Field(
default=None,