""" DTOs (Data Transfer Objects) para módulo de clases de activos fijos (FA) """ from datetime import datetime from decimal import Decimal from typing import Optional from pydantic import BaseModel, ConfigDict, Field class FAClassCreateDTO(BaseModel): """DTO para crear una clase de activo fijo""" class_id: int = Field(..., description="ID de la clase base en a76.classes") import_tariff_code: Optional[str] = Field( None, max_length=10, description="Código de fracción de importación" ) import_tariff_type: Optional[str] = Field( None, max_length=6, description="Tipo de fracción de importación" ) export_tariff_code: Optional[str] = Field( None, max_length=10, description="Código de fracción de exportación" ) export_tariff_type: Optional[str] = Field( None, max_length=6, description="Tipo de fracción de exportación" ) depreciation_rate: Optional[Decimal] = Field( None, description="Tasa de depreciación anual", ge=0, le=100 ) fda_code: Optional[str] = Field( None, max_length=20, description="Código FDA" ) eccn_code: Optional[str] = Field( None, max_length=20, description="Código ECCN (Export Control Classification Number)" ) class_enabled: Optional[bool] = Field( True, description="Indica si la clase está habilitada" ) class Config: from_attributes = True class FAClassUpdateDTO(BaseModel): """DTO para actualizar una clase de activo fijo""" import_tariff_code: Optional[str] = Field( None, max_length=10, description="Código de fracción de importación" ) import_tariff_type: Optional[str] = Field( None, max_length=6, description="Tipo de fracción de importación" ) export_tariff_code: Optional[str] = Field( None, max_length=10, description="Código de fracción de exportación" ) export_tariff_type: Optional[str] = Field( None, max_length=6, description="Tipo de fracción de exportación" ) depreciation_rate: Optional[Decimal] = Field( None, description="Tasa de depreciación anual", ge=0, le=100 ) fda_code: Optional[str] = Field( None, max_length=20, description="Código FDA" ) eccn_code: Optional[str] = Field( None, max_length=20, description="Código ECCN" ) class_enabled: Optional[bool] = Field( None, description="Indica si la clase está habilitada" ) class Config: from_attributes = True class FAClassResponseDTO(BaseModel): """DTO para respuesta de clase de activo fijo""" id: int tenant_id: int company_id: int class_id: int import_tariff_code: Optional[str] = None import_tariff_type: Optional[str] = None export_tariff_code: Optional[str] = None export_tariff_type: Optional[str] = None depreciation_rate: Optional[Decimal] = None fda_code: Optional[str] = None eccn_code: Optional[str] = None class_enabled: Optional[bool] = None created_at: datetime updated_at: datetime model_config = ConfigDict(from_attributes=True) class FAClassListResponseDTO(BaseModel): """DTO para respuesta de lista paginada de clases de activos fijos""" items: list[FAClassResponseDTO] total: int page: int page_size: int model_config = ConfigDict(from_attributes=True)