231 lines
5.5 KiB
Python
231 lines
5.5 KiB
Python
from ast import Try
|
|
from typing import List, Optional, Dict
|
|
from pydantic import BaseModel, Field, confloat, constr
|
|
from sqlalchemy.sql.sqltypes import Boolean, DateTime
|
|
from sqlalchemy.sql.sqltypes import DateTime
|
|
|
|
|
|
class SumNumberTwoFormat(BaseModel):
|
|
__root__: Optional[confloat(ge=0.0, le=100000000.0, multiple_of=0.01)]
|
|
|
|
|
|
class NumberPrice(BaseModel):
|
|
__root__: confloat(ge=0.0, le=42949673.0, multiple_of=0.01)
|
|
|
|
|
|
class PhoneNumber(BaseModel):
|
|
__root__: constr(regex=r'^([^\s\\]{0,17}|\+[^\s\\]{1,18})$')
|
|
|
|
|
|
class NumberTwoFormat(BaseModel):
|
|
__root__: confloat(ge=0.0, le=100000000.0, multiple_of=0.01)
|
|
|
|
|
|
class NumberThreeFormat(BaseModel):
|
|
__root__: confloat(ge=0.0, le=100000.0, multiple_of=0.001)
|
|
|
|
|
|
class Service(BaseModel):
|
|
callback_url: Optional[constr(max_length=256)] = None
|
|
|
|
|
|
class Warnings(BaseModel):
|
|
callback_url: str = None
|
|
|
|
|
|
class PayingAgent(BaseModel):
|
|
operation: Optional[str] = None
|
|
phones: Optional[List[PhoneNumber]] = None
|
|
|
|
|
|
class SupplierInfo(BaseModel):
|
|
phones: Optional[List[PhoneNumber]] = None
|
|
name: Optional[str] = None
|
|
inn: Optional[str] = None
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
class ReceivePaymentsOperator(BaseModel):
|
|
phones: Optional[List[PhoneNumber]] = None
|
|
|
|
|
|
class MoneyTransferOperator(BaseModel):
|
|
phones: Optional[List[PhoneNumber]] = None
|
|
name: Optional[str] = None
|
|
address: Optional[str] = None
|
|
inn: Optional[constr(regex=r'(^[0-9]{10}$)|(^[0-9]{12}$)')] = None
|
|
|
|
|
|
class Company(BaseModel):
|
|
email: Optional[constr(max_length=64)] = None
|
|
sno: Optional[str] = None
|
|
inn: constr(max_length=12)
|
|
payment_address: constr(max_length=256)
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
class ClientItem(BaseModel):
|
|
email: constr(max_length=64) = None
|
|
phone: Optional[constr(max_length=64)] = None
|
|
|
|
|
|
class AdditionalUserProps(BaseModel):
|
|
name: constr(max_length=64)
|
|
value: constr(max_length=256)
|
|
|
|
|
|
class AgentInfo(BaseModel):
|
|
type: Optional[str] = None
|
|
paying_agent: Optional[PayingAgent] = None
|
|
receive_payments_operator: Optional[ReceivePaymentsOperator] = None
|
|
money_transfer_operator: Optional[MoneyTransferOperator] = None
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
class Error(BaseModel):
|
|
error_id: Optional[str] = None
|
|
code: int
|
|
text: str
|
|
type: Optional[str] = None
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
class Payload(BaseModel):
|
|
fiscal_receipt_number: int
|
|
shift_number: int
|
|
receipt_datetime: str
|
|
total: float
|
|
fn_number: str
|
|
ecr_registration_number: str
|
|
fiscal_document_number: int
|
|
fiscal_document_attribute: int
|
|
fns_site: str
|
|
|
|
|
|
class Vat(BaseModel):
|
|
type: Optional[str] = None
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
class CorrectionInfo(BaseModel):
|
|
type: str
|
|
base_date: str
|
|
base_number: str
|
|
|
|
|
|
class Payment(BaseModel):
|
|
type: int
|
|
sum: SumNumberTwoFormat
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
class Item(BaseModel):
|
|
name: str
|
|
price: NumberPrice
|
|
quantity: NumberThreeFormat
|
|
sum: SumNumberTwoFormat
|
|
measurement_unit: Optional[constr(max_length=16)] = None
|
|
payment_method: Optional[str] = None
|
|
payment_object: Optional[str] = None
|
|
nomenclature_code: Optional[str] = None
|
|
vat: Optional[Vat] = None
|
|
agent_info: Optional[AgentInfo] = None
|
|
supplier_info: Optional[SupplierInfo] = None
|
|
user_data: Optional[constr(max_length=64)] = None
|
|
excise: Optional[confloat(ge=0.0)] = None
|
|
country_code: Optional[constr(
|
|
regex=r'^[0-9]*$', min_length=1, max_length=3)] = None
|
|
declaration_number: Optional[constr(min_length=1, max_length=32)] = None
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
class Receipt(BaseModel):
|
|
client: ClientItem
|
|
company: Company
|
|
agent_info: Optional[AgentInfo] = None
|
|
supplier_info: Optional[SupplierInfo] = None
|
|
items: List[Item] = Field(..., min_items=1)
|
|
payments: List[Payment] = Field(..., max_items=10, min_items=1)
|
|
vats: Optional[List[Vat]] = Field(None, max_items=6, min_items=1)
|
|
total: NumberTwoFormat
|
|
additional_check_props: Optional[constr(max_length=16)] = None
|
|
cashier: Optional[constr(max_length=64)] = None
|
|
additional_user_props: Optional[AdditionalUserProps] = None
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
class Correction(BaseModel):
|
|
company: Company
|
|
cashier: Optional[constr(max_length=64)] = None
|
|
correction_info: CorrectionInfo
|
|
payments: List[int] = Field(..., max_items=10, min_items=1)
|
|
vats: List[Vat] = Field(..., max_items=6, min_items=1)
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
class Doc(BaseModel):
|
|
uuid: str
|
|
timestamp: str
|
|
group_code: str
|
|
daemon_code: str
|
|
device_code: str
|
|
external_id: Optional[str] = None
|
|
callback_url: Optional[str] = None
|
|
status: Optional[str] = None
|
|
error: Error = None
|
|
warnings: Optional[Warnings] = None
|
|
payload: Payload = None
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
class Sell(BaseModel):
|
|
external_id: constr(max_length=128)
|
|
receipt: Receipt
|
|
service: Optional[Service] = None
|
|
timestamp: str = None
|
|
|
|
class Config:
|
|
arbitrary_types_allowed = True
|
|
|
|
class AtolSell(BaseModel):
|
|
uuid: str
|
|
timestamp: str
|
|
status: Optional[str] = None
|
|
error: Error = None
|
|
external_id: Optional[str] = None
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
class SellCreate(Sell):
|
|
is_refund: bool
|
|
|
|
|
|
class SellShow(SellCreate):
|
|
id: int
|
|
|
|
|
|
class Correction(BaseModel):
|
|
timestamp: str
|
|
external_id: constr(max_length=128)
|
|
service: Optional[Service] = None
|