Files
X-Financial/server/src/app/schemas/reimbursement.py

129 lines
2.9 KiB
Python
Raw Normal View History

from __future__ import annotations
from datetime import date, datetime
from decimal import Decimal
from typing import Any
from pydantic import BaseModel, ConfigDict, Field
class ReimbursementCreate(BaseModel):
request_no: str
employee_id: str
title: str
category: str
amount: Decimal
reason: str | None = None
class ReimbursementRead(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: str
request_no: str
employee_id: str
title: str
category: str
status: str
amount: Decimal
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 ExpenseClaimAttachmentAnalysisRead(BaseModel):
severity: str
label: str
headline: str
summary: str
points: list[str] = Field(default_factory=list)
suggestion: str = ""
class ExpenseClaimAttachmentRead(BaseModel):
file_name: str
storage_key: str
media_type: str
size_bytes: int
uploaded_at: datetime | None = None
previewable: bool = True
analysis: ExpenseClaimAttachmentAnalysisRead | None = None
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 ExpenseClaimItemCreate(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
class ExpenseClaimAttachmentActionResponse(BaseModel):
message: str
claim_id: str
item_id: str
invoice_id: str | None = None
attachment: ExpenseClaimAttachmentRead | None = None
class ExpenseClaimItemActionResponse(BaseModel):
message: str
claim_id: str
item_id: str