Files
service-app/kassa/schemas.py
2022-04-28 12:38:12 +09:00

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: Optional[str] = None
timestamp: str
group_code:Optional[str] = None
daemon_code: Optional[str] = None
device_code: Optional[str] = None
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