"""Schemas for Contract module.""" from datetime import date, datetime from typing import Optional from enum import Enum from pydantic import BaseModel, Field class ContractStatusEnum(str, Enum): DRAFT = "draft" PENDING_APPROVAL = "pending_approval" APPROVED = "approved" PENDING_SIGNATURE = "pending_signature" SIGNED = "signed" ARCHIVED = "archived" REJECTED = "rejected" class ContractBase(BaseModel): """Base schema for Contract.""" title: str = Field(..., max_length=200) party_a: str = Field(..., max_length=100) party_b: str = Field(..., max_length=100) content: str contract_number: Optional[str] = Field(None, max_length=50) effective_date: Optional[date] = None expiry_date: Optional[date] = None class ContractCreate(ContractBase): """Schema for creating a contract.""" template_id: Optional[int] = None class ContractUpdate(BaseModel): """Schema for updating a contract.""" title: Optional[str] = Field(None, max_length=200) party_a: Optional[str] = Field(None, max_length=100) party_b: Optional[str] = Field(None, max_length=100) content: Optional[str] = None contract_number: Optional[str] = Field(None, max_length=50) effective_date: Optional[date] = None expiry_date: Optional[date] = None status: Optional[ContractStatusEnum] = None class ContractResponse(ContractBase): """Schema for contract response.""" id: int template_id: Optional[int] = None status: ContractStatusEnum file_path: Optional[str] = None created_by: int created_at: datetime updated_at: datetime class Config: from_attributes = True class ContractTemplateBase(BaseModel): """Base schema for ContractTemplate.""" name: str = Field(..., max_length=100) content: str contract_type: Optional[str] = Field(None, max_length=50) class ContractTemplateCreate(ContractTemplateBase): """Schema for creating a contract template.""" pass class ContractTemplateResponse(ContractTemplateBase): """Schema for contract template response.""" id: int created_by: int created_at: datetime class Config: from_attributes = True class ApprovalRequest(BaseModel): """Schema for approval request.""" comment: Optional[str] = None class ApprovalResponse(BaseModel): """Schema for approval response.""" id: int contract_id: int approver_id: int status: ContractStatusEnum comment: Optional[str] = None created_at: datetime approved_at: Optional[datetime] = None class Config: from_attributes = True class ContractReviewRequest(BaseModel): """Schema for AI contract review request.""" contract_content: str contract_type: Optional[str] = None class ContractReviewResponse(BaseModel): """Schema for AI contract review response.""" review_result: str risks: list = [] suggestions: list = []