import uuid from datetime import datetime from typing import Optional import pydantic from pydantic import Field from core.models.base import BaseModel class Financial(pydantic.BaseModel): status: Optional[int] = Field(description="صورت وضعیت") prepayment: Optional[int] = Field(description=" پیش پرداخت") modification: Optional[int] = Field(description="تعدیل") good_job: Optional[int] = Field(description="حسن انجام کار") total: Optional[int] = Field(default=0, description='مجموع') class ForceMajor(pydantic.BaseModel): force_event: Optional[int] = Field(description="حوادث قهری") material: Optional[int] = Field(description="محدودیت ورود مصالح") rules: Optional[int] = Field(description="وضع قوانین جدید") define_indicators: Optional[int] = Field(description="تاخیرات در اعالم شاخص های قطعی") total: Optional[int] = Field(default=0, description='مجموع') class Technical(pydantic.BaseModel): map_technical: Optional[int] = Field(description="تغییر نقشه و مشخصات فنی") permit: Optional[int] = Field(description="تاخیرات در تحویل کارگاه معارض زمین یا اخذ پروانه") purchase: Optional[int] = Field(description="تاخیر در خرید کارفرمایی") suspense: Optional[int] = Field(description="تعلیق پیمان ماده 49") total: Optional[int] = Field(default=0, description='مجموع') class BillDelayModel(BaseModel): id: Optional[uuid.UUID] = Field(alias='_id') project_id: uuid.UUID = Field(description='کد شناسایی پروژ') financial: Optional[Financial] = Field(description='مسائل مالی') force_major: Optional[ForceMajor] = Field(description='فورس ماژور') technical: Optional[Technical] = Field(description='فنی و قراردادی') extra_new_work: Optional[int] = Field(description='کارهای اضافی جدید') other: Optional[int] = Field(description='سایر') illegal: Optional[int] = Field(description='غیر مجاز') overlapping: Optional[int] = Field(description='هم پوشانی') date_present_bill: Optional[datetime] = Field(description='تاریخ ارائه لایحه') date_consider_bill: Optional[datetime] = Field(description='تاریخ رسیدگی لایحه') date_submission_bill: Optional[datetime] = Field(description='تاریخ ابلاغ لایحه') description: Optional[str] = Field(description='توضیحات') end_at: Optional[datetime] = Field(description='تاریخ خاتمه پیمان') total_day: Optional[int] = Field(default=0,description='جمع روزها')