refactor(backend): update reimbursement and expense claims

- endpoints/reimbursements.py: update reimbursement API endpoint
- schemas/reimbursement.py: update reimbursement data schemas
- services/expense_claims.py: update expense claims service logic
This commit is contained in:
caoxiaozhu
2026-05-13 03:22:52 +00:00
parent 6147b690b2
commit cea8239370
3 changed files with 448 additions and 6 deletions

View File

@@ -1,9 +1,10 @@
from __future__ import annotations
from datetime import datetime
from datetime import date, datetime
from decimal import Decimal
from typing import Any
from pydantic import BaseModel, ConfigDict
from pydantic import BaseModel, ConfigDict, Field
class ReimbursementCreate(BaseModel):
@@ -28,3 +29,58 @@ class ReimbursementRead(BaseModel):
reason: str | None
created_at: datetime
updated_at: datetime
class ExpenseClaimItemRead(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: str
item_date: date
item_type: str
item_reason: str
item_location: str
item_amount: Decimal
invoice_id: str | None
created_at: datetime
updated_at: datetime
class ExpenseClaimItemUpdate(BaseModel):
item_date: date | None = None
item_type: str | None = None
item_reason: str | None = None
item_location: str | None = None
item_amount: Decimal | None = None
invoice_id: str | None = None
class ExpenseClaimRead(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: str
claim_no: str
employee_id: str | None
employee_name: str
department_id: str | None
department_name: str
project_code: str | None
expense_type: str
reason: str
location: str
amount: Decimal
currency: str
invoice_count: int
occurred_at: datetime
submitted_at: datetime | None
status: str
approval_stage: str | None
risk_flags_json: list[Any] = Field(default_factory=list)
created_at: datetime
updated_at: datetime
items: list[ExpenseClaimItemRead] = Field(default_factory=list)
class ExpenseClaimActionResponse(BaseModel):
message: str
claim_id: str
status: str | None = None