from enum import Enum from typing import Optional from pydantic import BaseModel, validator, Field class WorkStatus(Enum): WORKING = "working" NOT_WORKING = "not_working" FIRED = "fired" class EmploymentType(str, Enum): selfemployed = "selfemployed" park_employee = "park_employee" individual_entrepreneur = "individual_entrepreneur" class Account(BaseModel): balance_limit: str = Field(..., description="Лимит по счету, например: 50") block_orders_on_balance_below_limit: bool = Field( False, description="Запрещены ли все заказы при балансе ниже лимита" ) payment_service_id: str = Field(..., description="ID для платежа, например: 12345") work_rule_id: Optional[str] = Field(None, description="Идентификатор условия работы, например: bc43tre6ba054dfdb7143ckfgvcby63e") class OrderProvider(BaseModel): partner: bool = Field(..., description="Доступны ли заказы от партнера") platform: bool = Field(..., description="Доступны ли заказы от платформы") class Profile(BaseModel): comment: Optional[str] = Field(None, description="Прочее, например: great driver") feedback: Optional[str] = Field(None, description="Прочее (доступно сотрудникам парка), например: great driver") fire_date: Optional[str] = Field(None, description="Дата увольнения из парка в формате ISO 8601 без временной зоны, например: 2020-10-28") hire_date: Optional[str] = Field(None, description="Дата приема в парк в формате ISO 8601 без временной зоны, например: 2020-10-28") work_status: WorkStatus = Field(..., description="Статус работы водителя: working, not_working, fired") class FullName(BaseModel): first_name: str = Field(..., description="Имя, например: Ivan") last_name: str = Field(..., description="Фамилия, например: Ivanov") middle_name: Optional[str] = Field(None, description="Отчество, например: Ivanovich") class DriverLicenseExperience(BaseModel): total_since_date: str = Field(..., description="Дата начала водительских обязанностей в формате ISO 8601 без временной зоны, например: 1970-01-01") class DriverLicense(BaseModel): birth_date: Optional[str] = Field(None, description="Дата рождения в формате ISO 8601 без временной зоны, например: 1975-10-28") country: Optional[str] = Field(None, description="Страна выдачи водительского удостоверения (трехбуквенный код), например: rus") expiry_date: Optional[str] = Field(None, description="Дата окончания действия в формате ISO 8601 без временной зоᔊы, например: 2050-10-28") issue_date: Optional[str] = Field(None, description="Дата выдачи в формате ISO 8601 без временной зоны, например: 2020-10-28") number: Optional[str] = Field(None, description="Серия и номер водительского удостоверения, например: 070236") class ContactInfo(BaseModel): address: Optional[str] = Field(None, description="Адрес, например: Moscow, Ivanovskaya Ul., bld. 40/2, appt. 63") email: Optional[str] = Field(None, description="Э trueлронная почта, например: example-email@example.com") phone: Optional[str] = Field(None, description="Номер телефона, например: +79999999999", pattern=r"^\+\d{1,15}$") class Person(BaseModel): contact_info: Optional[ContactInfo] = Field(None, description="Контактная информация водителя") driver_license: Optional[DriverLicense] = Field(None, description="Информация о водительском уд揪тверении") driver_license_experience: Optional[DriverLicenseExperience] = Field(None, description="Водительский стаж с даты") employment_type: EmploymentType = Field(..., description="Тип занятости: selfemployed, park_employee, individual_entrepreneur") full_name: Optional[FullName] = Field(None, description="Полное имя водителя") tax_identification_number: str = Field(..., min_length=1, description="Идентификационный номер налогоплательщика, например: 7743013902") class DriverProfile(BaseModel): account: Optional[Account] = Field(None, description="Счет водителя") profile: Optional[Profile] = Field(None, description="Профиль водителя") person: Optional[Person] = Field(None, description="Персональная информация водителя") order_provider: Optional[OrderProvider] = Field(None, description="Доступность заказов водителем") car_id: str = Field(..., description="ID машины, например: 12345", min_length=1, max_length=100)