""" DTOs (Data Transfer Objects) para módulo de empresa Reemplaza schemas.py siguiendo enfoque DDD y estilo NestJS """ from pydantic import BaseModel, Field from typing import Optional from datetime import datetime class CompanyCreateDTO(BaseModel): """DTO para crear una empresa""" id: str = Field(default='EMP', max_length=3, description="Company ID") consecutive: bool = Field(default=True, description="Unique record control") name: Optional[str] = Field(None, max_length=255, description="Company name") rfc: Optional[str] = Field(None, max_length=30, description="Company RFC") main_activity: Optional[str] = Field(None, max_length=255, description="Main activity") # Program information program: Optional[str] = Field(None, max_length=10, description="Program") program_number: Optional[str] = Field(None, max_length=40, description="Program number") prosec: Optional[int] = Field(None, description="PROSEC") prosec_authorization: Optional[str] = Field(None, max_length=20, description="PROSEC authorization") # Identifiers manufacturer_id: Optional[str] = Field(None, max_length=25, description="Manufacturer ID") broker_company: Optional[str] = Field(None, max_length=10, description="Broker company") # Responsible person responsible: Optional[str] = Field(None, max_length=80, description="Responsible person") responsible_name: Optional[str] = Field(None, max_length=20, description="Responsible first name") responsible_last_name: Optional[str] = Field(None, max_length=20, description="Responsible last name") responsible_mother_last_name: Optional[str] = Field(None, max_length=20, description="Responsible mother's last name") responsible_rfc: Optional[str] = Field(None, max_length=30, description="Responsible RFC") position: Optional[str] = Field(None, max_length=30, description="Responsible position") # Configuration logo: Optional[str] = Field(None, max_length=255, description="Company logo") has_express_line: Optional[bool] = Field(None, description="Has express line") order_format_type: Optional[str] = Field(None, max_length=19, description="Order format type") previous_code: Optional[int] = Field(None, description="Previous code") is_service_company: Optional[bool] = Field(None, description="Is service company") # Client and subassembly client_name: Optional[str] = Field(None, max_length=300, description="Client name") subassembly_mode: Optional[str] = Field(None, max_length=7, description="Subassembly mode") # Additional information curp: Optional[str] = Field(None, max_length=19, description="CURP") inter_db_name: Optional[str] = Field(None, max_length=100, description="Inter DB name") ctpat_svi: Optional[str] = Field(None, max_length=100, description="CTPAT SVI") trusted_exporter_number: Optional[str] = Field(None, max_length=50, description="Trusted exporter number") prevalidator_key: Optional[str] = Field(None, max_length=20, description="Prevalidator key") seventh_amendment: Optional[bool] = Field(None, description="Seventh amendment") class Config: from_attributes = True class CompanyUpdateDTO(BaseModel): """DTO para actualizar una empresa""" name: Optional[str] = Field(None, max_length=255, description="Company name") rfc: Optional[str] = Field(None, max_length=30, description="Company RFC") main_activity: Optional[str] = Field(None, max_length=255, description="Main activity") # Program information program: Optional[str] = Field(None, max_length=10, description="Program") program_number: Optional[str] = Field(None, max_length=40, description="Program number") prosec: Optional[int] = Field(None, description="PROSEC") prosec_authorization: Optional[str] = Field(None, max_length=20, description="PROSEC authorization") # Identifiers manufacturer_id: Optional[str] = Field(None, max_length=25, description="Manufacturer ID") broker_company: Optional[str] = Field(None, max_length=10, description="Broker company") # Responsible person responsible: Optional[str] = Field(None, max_length=80, description="Responsible person") responsible_name: Optional[str] = Field(None, max_length=20, description="Responsible first name") responsible_last_name: Optional[str] = Field(None, max_length=20, description="Responsible last name") responsible_mother_last_name: Optional[str] = Field(None, max_length=20, description="Responsible mother's last name") responsible_rfc: Optional[str] = Field(None, max_length=30, description="Responsible RFC") position: Optional[str] = Field(None, max_length=30, description="Responsible position") # Configuration logo: Optional[str] = Field(None, max_length=255, description="Company logo") has_express_line: Optional[bool] = Field(None, description="Has express line") order_format_type: Optional[str] = Field(None, max_length=19, description="Order format type") previous_code: Optional[int] = Field(None, description="Previous code") is_service_company: Optional[bool] = Field(None, description="Is service company") # Client and subassembly client_name: Optional[str] = Field(None, max_length=300, description="Client name") subassembly_mode: Optional[str] = Field(None, max_length=7, description="Subassembly mode") # Additional information curp: Optional[str] = Field(None, max_length=19, description="CURP") inter_db_name: Optional[str] = Field(None, max_length=100, description="Inter DB name") ctpat_svi: Optional[str] = Field(None, max_length=100, description="CTPAT SVI") trusted_exporter_number: Optional[str] = Field(None, max_length=50, description="Trusted exporter number") prevalidator_key: Optional[str] = Field(None, max_length=20, description="Prevalidator key") seventh_amendment: Optional[bool] = Field(None, description="Seventh amendment") class Config: from_attributes = True class CompanyResponseDTO(BaseModel): """DTO para respuesta de empresa""" id: str consecutive: bool name: Optional[str] = None rfc: Optional[str] = None main_activity: Optional[str] = None # Program information program: Optional[str] = None program_number: Optional[str] = None prosec: Optional[int] = None prosec_authorization: Optional[str] = None # Identifiers manufacturer_id: Optional[str] = None broker_company: Optional[str] = None # Responsible person responsible: Optional[str] = None responsible_name: Optional[str] = None responsible_last_name: Optional[str] = None responsible_mother_last_name: Optional[str] = None responsible_rfc: Optional[str] = None position: Optional[str] = None # Configuration logo: Optional[str] = None has_express_line: Optional[bool] = None order_format_type: Optional[str] = None previous_code: Optional[int] = None is_service_company: Optional[bool] = None # Client and subassembly client_name: Optional[str] = None subassembly_mode: Optional[str] = None # Additional information curp: Optional[str] = None inter_db_name: Optional[str] = None ctpat_svi: Optional[str] = None trusted_exporter_number: Optional[str] = None prevalidator_key: Optional[str] = None seventh_amendment: Optional[bool] = None # Timestamps created_at: datetime updated_at: Optional[datetime] = None class Config: from_attributes = True