Files
plantillas-proyectos/backend/api/v1/modules/a76/items/line_customs/schemas.py
AlexeerCT 304f7b07d4 feat: add items tab form and save invoice functionality
- Implemented the items tab form in Svelte for editing invoices, displaying item quantities and import values.
- Created saveInvoice function to handle both creation and updating of invoices, including validation of required fields and building a unified payload for API requests.
- Added support for compliance, financials, and logistics data in the invoice payload.
2025-12-29 18:00:46 -06:00

59 lines
3.1 KiB
Python

from decimal import Decimal
from typing import Optional
from pydantic import BaseModel, Field, ConfigDict
# ============================================================================
# LINE CUSTOMS SCHEMAS
# ============================================================================
class LineCustomBase(BaseModel):
"""Base schema for line customs"""
# Tariff/Customs Classifications
fraction: Optional[str] = Field(None, max_length=10, description="Fraction (FRACCION/FRACCIONIMPO/FRACCIONEXPO)")
fraction_type: Optional[str] = Field(None, max_length=7, description="Fraction type (TIPOFRACCION/TIPOFRACCIONIMPO/TIPOFRACCIONEXPO)")
american_fraction: Optional[str] = Field(None, max_length=16, description="American fraction (FRACCIONAMERICANA)")
alternate_fraction: Optional[str] = Field(None, max_length=10, description="Alternate fraction (FRACCIONALTERNA)")
reference_fraction: Optional[str] = Field(None, max_length=10, description="Reference fraction (FRACCIONREFERENCIA)")
octave_fraction: Optional[str] = Field(None, max_length=10, description="Octave fraction (FRACCIONROCTAVA)")
tlcan_fraction: Optional[str] = Field(None, max_length=13, description="TLCAN fraction (FRACCIONTLCAN)")
extra_american_fraction: Optional[str] = Field(None, max_length=16, description="Extra American fraction (FRACAMESELEXTRA)")
garment_fraction: Optional[str] = Field(None, max_length=19, description="Garment fraction (FRACCIONDELAPRENDA/FRACCIONDELAPARTIDA)")
# Ad Valorem
advalorem: Optional[str] = Field(None, max_length=10, description="Ad valorem (ADVIMPO/ADVEXPO)")
advalorem_numeric: Optional[Decimal] = Field(None, description="Ad valorem numeric (ADVIMPONUM/ADVEXPONUM)")
advalorem_american: Optional[Decimal] = Field(None, description="Ad valorem American (ADVAME)")
advalorem_tlcan: Optional[Decimal] = Field(None, description="Ad valorem TLCAN (ADVTLCAN)")
# Rates
rate: Optional[str] = Field(None, max_length=10, description="Rate (TASAIM/TASAEX)")
depreciation_rate: Optional[Decimal] = Field(None, description="Depreciation rate (TASADEPRECIA)")
# Origin/Destination
origin_country: Optional[str] = Field(None, max_length=3, description="Origin country (PAISORIGEN)")
destination_country: Optional[str] = Field(None, max_length=3, description="Destination country (PAISDESTINO)")
optional_country: Optional[str] = Field(None, max_length=3, description="Optional country (PAISOPCIONAL)")
origin_procedure: Optional[str] = Field(None, max_length=3, description="Origin procedure (PROCEDENCIA)")
scrap_procedure: Optional[str] = Field(None, max_length=3, description="Scrap procedure (PROCSCRAP)")
# Sector
sector: Optional[str] = Field(None, max_length=8, description="Sector (SECTOR)")
class LineCustomCreate(LineCustomBase):
"""Schema for creating line customs"""
pass
class LineCustomUpdate(LineCustomBase):
"""Schema for updating line customs"""
pass
class LineCustomResponse(LineCustomBase):
"""Schema for line customs response"""
id: int
item_line_id: int
model_config = ConfigDict(from_attributes=True)