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

from __future__ import annotations

from datetime import date, datetime
from decimal import Decimal
from typing import Annotated, List, Optional

from pydantic import BaseModel, ConfigDict, Field, PlainSerializer

from tbank.dolyame.enums import OrderStatus, RefundStatus, ScheduleStatus


[документация] class DolyameModel(BaseModel): """База Долями: провод — snake_case (совпадает с Python), без алиасов.""" model_config = ConfigDict(populate_by_name=True, extra="ignore")
# Суммы Долями — рубли, в JSON число (double, 2 знака); у пользователя Decimal. Money = Annotated[ Decimal, PlainSerializer(lambda v: float(v), return_type=float, when_used="json") ] # --- Общие ---
[документация] class Item(DolyameModel): name: str quantity: int price: Money # цена одной позиции, рубли sku: Optional[str] = None
[документация] class ClientInfo(DolyameModel): first_name: Optional[str] = None last_name: Optional[str] = None middle_name: Optional[str] = None birthdate: Optional[date] = None # yyyy-MM-dd phone: Optional[str] = None # +79993334444 email: Optional[str] = None
# --- Запросы ---
[документация] class Order(DolyameModel): id: str # идентификатор заказа в системе магазина amount: Money # amount + prepaid_amount = Σ(qty × price) items: List[Item] prepaid_amount: Optional[Money] = None # аванс иными способами
[документация] class CreateOrderRequest(DolyameModel): order: Order client_info: Optional[ClientInfo] = None # на верхнем уровне, не внутри order notification_url: Optional[str] = None success_url: Optional[str] = None fail_url: Optional[str] = None
[документация] class CommitRequest(DolyameModel): amount: Money items: List[Item] prepaid_amount: Optional[Money] = None
[документация] class RefundRequest(DolyameModel): amount: Money returned_items: List[Item] refunded_prepaid_amount: Optional[Money] = None
[документация] class CorrectionRequest(DolyameModel): amount: Money refunded_prepaid_amount: Optional[Money] = None new_items: Optional[List[Item]] = None # перезаписать корзину
[документация] class DeliveryOrder(DolyameModel): amount: Money items: List[Item] prepaid_amount: Optional[Money] = None
[документация] class CompleteDeliveryRequest(DolyameModel): order: Optional[DeliveryOrder] = None
# --- Ответы ---
[документация] class ScheduleItem(DolyameModel): amount: Money payment_date: date status: ScheduleStatus
[документация] class RefundInfoItem(DolyameModel): refund_id: str refunded_amount: Money refunded_prepaid_amount: Money status: RefundStatus
[документация] class RefundInfo(DolyameModel): total_refunded_amount: Money total_refunded_prepaid_amount: Money items: List[RefundInfoItem] = Field(default_factory=list)
[документация] class InstallmentInfo(DolyameModel): term: int loan_number: Optional[str] = None
[документация] class OrderInfoItem(DolyameModel): name: str price: Money quantity: int sku: Optional[str] = None
[документация] class OrderInfo(DolyameModel): status: OrderStatus amount: Money # общая сумма к оплате клиентом residual_amount: Money # остаток к погашению клиентом link: str # ссылка на форму заказа (payment_url) payment_schedule: List[ScheduleItem] = Field(default_factory=list) refund_info: Optional[RefundInfo] = None installment_info: Optional[InstallmentInfo] = None items: Optional[List[OrderInfoItem]] = None # только в методе info end_cooling_period: Optional[datetime] = None
[документация] class RefundResponse(DolyameModel): amount: Money # сумма к выплате клиентом после возврата refund_id: str
[документация] class WebhookNotification(DolyameModel): id: str status: OrderStatus amount: Optional[Money] = None residual_amount: Optional[Money] = None demo: Optional[bool] = None client_info: Optional[ClientInfo] = None payment_schedule: List[ScheduleItem] = Field(default_factory=list) cid: Optional[str] = None signature: Optional[str] = None