- endpoints/reimbursements.py: update reimbursement API endpoint - schemas/reimbursement.py: update reimbursement data schemas - services/expense_claims.py: update expense claims service logic
87 lines
1.9 KiB
Python
87 lines
1.9 KiB
Python
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 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
|