Исходный код tbank.ved.models

from __future__ import annotations

from datetime import date, datetime
from decimal import Decimal
from typing import Annotated, Any, Dict, List, Optional, Union

from pydantic import BaseModel, ConfigDict, PlainSerializer
from pydantic.alias_generators import to_camel

from tbank.ved.enums import (
    ApplicationStatus,
    ContractSubject,
    ContractType,
    EstateType,
    SignAffiliation,
    Supply,
)

WriteDecimal = Annotated[
    Decimal, PlainSerializer(lambda v: float(v), return_type=float, when_used="json")
]


[документация] class VedModel(BaseModel): """Базовая модель домена: snake_case в Python, camelCase на проводе.""" model_config = ConfigDict( alias_generator=to_camel, populate_by_name=True, extra="ignore", )
[документация] class Attachment(VedModel): document_id: Union[int, str] document_name: Optional[str] = None version: Optional[int] = None
[документация] class Counterparty(VedModel): name: str country_code: str sign_affiliation: Optional[SignAffiliation] = None
[документация] class ResidentInfo(VedModel): inn: str kpp: Optional[str] = None
[документация] class ContractInfo(VedModel): """Сведения о валютном контракте для постановки на учёт.""" contract_subject: ContractSubject currency_code: str contract_date: date exchange_rate_effective_date: date contract_type: Optional[ContractType] = None supply: Optional[Supply] = None estate_type: Optional[EstateType] = None amount: Optional[WriteDecimal] = None liabilities_finish_date: Optional[date] = None contract_number: Optional[str] = None attachments: Optional[List[Attachment]] = None counterparty: Optional[List[Counterparty]] = None
[документация] class RegisterContractRequest(VedModel): open_api_application_id: str contract_info: ContractInfo resident_info: Optional[ResidentInfo] = None
[документация] class ApplicationResult(VedModel): """Ответ на регистрацию/изменение/снятие контракта.""" open_api_application_id: str
# --- Изменение контракта ---
[документация] class AmendmentDocument(VedModel): document_date: date attachments: List[Attachment] document_number: Optional[str] = None
[документация] class AmendContractRequest(VedModel): open_api_application_id: str unique_contract_number: str amendments: Dict[str, Any] amendment_documents: Optional[List[AmendmentDocument]] = None
# --- Снятие с учёта ---
[документация] class ChangeDocument(VedModel): document_date: date document_number: Optional[str] = None
[документация] class AssignmentResidentInfo(VedModel): name: str ogrn: str ogrn_date: date inn: str kpp: Optional[str] = None change_document: Optional[ChangeDocument] = None
[документация] class AssignmentNonResidentInfo(VedModel): name: str country_code: str change_document: Optional[ChangeDocument] = None
[документация] class DeregisterContractRequest(VedModel): open_api_application_id: str unique_contract_number: str deregistration_reason: int attachments: Optional[List[Attachment]] = None assignment_resident_info: Optional[AssignmentResidentInfo] = None assignment_non_resident_info: Optional[AssignmentNonResidentInfo] = None
# --- Статус заявления ---
[документация] class ApplicationStatusMetadata(VedModel): unique_contract_number: Optional[str] = None
[документация] class ApplicationStatusInfo(VedModel): open_api_application_id: str status: ApplicationStatus datetime: datetime metadata: ApplicationStatusMetadata description: Optional[str] = None