Files
ctms/backend/app/schemas/contract_fee.py
T
2026-01-13 16:49:55 +08:00

58 lines
1.7 KiB
Python

import uuid
from datetime import date, datetime
from decimal import Decimal
from typing import Optional
from pydantic import BaseModel, ConfigDict, Field
from app.schemas.contract_fee_payment import ContractFeePaymentRead
from app.schemas.fee_attachment import FeeAttachmentRead
class ContractFeeCreate(BaseModel):
project_id: uuid.UUID
center_id: uuid.UUID
contract_amount: Decimal = Field(ge=0)
contract_cases: int = Field(ge=0)
actual_cases: Optional[int] = Field(default=None, ge=0)
settlement_amount: Optional[Decimal] = Field(default=None, ge=0)
final_payment_amount: Optional[Decimal] = Field(default=None, ge=0)
class ContractFeeUpdate(BaseModel):
contract_amount: Optional[Decimal] = Field(default=None, ge=0)
contract_cases: Optional[int] = Field(default=None, ge=0)
actual_cases: Optional[int] = Field(default=None, ge=0)
settlement_amount: Optional[Decimal] = Field(default=None, ge=0)
final_payment_amount: Optional[Decimal] = Field(default=None, ge=0)
class ContractFeeRead(BaseModel):
id: uuid.UUID
project_id: uuid.UUID
center_id: uuid.UUID
contract_amount: Decimal
contract_cases: int
actual_cases: Optional[int]
settlement_amount: Optional[Decimal]
final_payment_amount: Optional[Decimal]
created_at: datetime
updated_at: datetime
model_config = ConfigDict(from_attributes=True)
class ContractFeeListItem(ContractFeeRead):
center_name: str
paid_total: Decimal
verified_total: Decimal
unpaid_balance: Decimal
unverified_balance: Decimal
last_paid_date: Optional[date]
last_verified_date: Optional[date]
class ContractFeeDetail(ContractFeeRead):
payments: list[ContractFeePaymentRead]
attachments: dict[str, list[FeeAttachmentRead]]