Se agregaron los moduloes de api_v2
This commit is contained in:
95
api/api_v2/modules/pedimentos/schemas.py
Normal file
95
api/api_v2/modules/pedimentos/schemas.py
Normal file
@@ -0,0 +1,95 @@
|
||||
from typing import Optional, Union, Dict, Any
|
||||
from uuid import UUID
|
||||
from datetime import datetime
|
||||
# CORRECCIÓN CLAVE: Se importa el 'validator' para que el decorador funcione
|
||||
from pydantic import BaseModel, Field, validator
|
||||
from schemas.CredencialSchema import CredencialBaseSchema
|
||||
|
||||
|
||||
|
||||
|
||||
class PedimentoBaseSchema(BaseModel):
|
||||
id: str = Field(..., description="ID único del pedimento")
|
||||
pedimento: str = Field(..., description="Número de pedimento")
|
||||
pedimento_app: str = Field(..., description="Número de pedimento en la aplicación")
|
||||
aduana: str = Field(..., description="Aduana asociada al pedimento")
|
||||
patente: str = Field(..., description="Patente asociada al pedimento")
|
||||
numero_operacion: str = Field(None, description="Número de operación del pedimento")
|
||||
# Usamos Field(None, ...) para campos Optional
|
||||
regimen: Optional[str] = Field(None, description="Régimen aduanero del pedimento")
|
||||
organizacion: str = Field(..., description="Organización asociada al pedimento")
|
||||
clave_pedimento: Optional[str] = Field(None, description="Clave del pedimento")
|
||||
|
||||
|
||||
fecha_pago: Optional[str] = Field(None, description="Fecha de pago del pedimento")
|
||||
fecha_inicio: Optional[str] = Field(None, description="Fecha de inicio del pedimento")
|
||||
fecha_fin: Optional[str] = Field(None, description="Fecha de fin del pedimento")
|
||||
alerta: Optional[bool] = Field(None, description="Indica si hay alerta en el pedimento")
|
||||
agente_aduanal: Optional[str] = Field(None, description="Agente aduanal asociado al pedimento")
|
||||
curp_apoderado: Optional[str] = Field(None, description="CURP del apoderado")
|
||||
|
||||
importe_total: Optional[float] = Field(None, description="Importe total del pedimento")
|
||||
saldo_disponible: Optional[float] = Field(None, description="Saldo disponible del pedimento")
|
||||
importe_pedimento: Optional[float] = Field(None, description="Importe del pedimento")
|
||||
existe_expediente: Optional[bool] = Field(None, description="Indica si existe expediente")
|
||||
|
||||
# Validadores de Pydantic v1 (usando @validator)
|
||||
|
||||
@validator('id')
|
||||
def validate_id(cls, v):
|
||||
if not v or not isinstance(v, str):
|
||||
raise ValueError('id must be a non-empty string')
|
||||
return v
|
||||
|
||||
@validator('pedimento')
|
||||
def validate_pedimento(cls, v):
|
||||
if not v or not isinstance(v, str):
|
||||
raise ValueError('pedimento must be a non-empty string')
|
||||
return v
|
||||
|
||||
@validator('pedimento_app')
|
||||
def validate_pedimento_app(cls, v):
|
||||
if not v or not isinstance(v, str):
|
||||
raise ValueError('pedimento_app must be a non-empty string')
|
||||
return v
|
||||
|
||||
@validator('aduana')
|
||||
def validate_aduana(cls, v):
|
||||
if not v or not isinstance(v, str):
|
||||
raise ValueError('aduana must be a non-empty string')
|
||||
return v
|
||||
|
||||
@validator('patente')
|
||||
def validate_patente(cls, v):
|
||||
if not v or not isinstance(v, str):
|
||||
raise ValueError('patente must be a non-empty string')
|
||||
return v
|
||||
|
||||
@validator('organizacion')
|
||||
def validate_organizacion(cls, v):
|
||||
if not v or not isinstance(v, str):
|
||||
raise ValueError('organizacion must be a non-empty string')
|
||||
return v
|
||||
|
||||
# Validadores combinados para campos opcionales
|
||||
@validator('fecha_pago', 'fecha_inicio', 'fecha_fin', 'agente_aduanal', 'curp_apoderado', 'regimen', 'clave_pedimento', pre=True)
|
||||
def validate_optional_strings(cls, v):
|
||||
if v is not None and not isinstance(v, str):
|
||||
raise ValueError('Campo opcional debe ser string o None')
|
||||
return v
|
||||
|
||||
@validator('alerta', 'existe_expediente', pre=True)
|
||||
def validate_optional_bools(cls, v):
|
||||
if v is not None and not isinstance(v, bool):
|
||||
raise ValueError('Campo opcional debe ser booleano o None')
|
||||
return v
|
||||
|
||||
@validator('importe_total', 'saldo_disponible', 'importe_pedimento', pre=True)
|
||||
def validate_optional_numbers(cls, v):
|
||||
if v is not None and not isinstance(v, (float, int)):
|
||||
raise ValueError('Campo opcional debe ser numérico o None')
|
||||
|
||||
|
||||
class PedimentoCompletoRequestSchema(BaseModel):
|
||||
pedimento: PedimentoBaseSchema
|
||||
credencial: CredencialBaseSchema
|
||||
Reference in New Issue
Block a user