Files
microservice/schemas/pedimentoSchema.py

112 lines
4.6 KiB
Python

from pydantic import BaseModel, Field, field_validator
from typing import Optional
from uuid import UUID
class PedimentoBaseSchema(BaseModel):
"""Esquema base para pedimentos con campos comunes"""
aduana: str = Field(..., min_length=3, max_length=3, description="Código de aduana (3 dígitos)", pattern="^[0-9]{3}$")
patente: str = Field(..., min_length=4, max_length=4, description="Número de patente (4 dígitos)", pattern="^[0-9]{4}$")
pedimento: str = Field(..., min_length=7, max_length=7, description="Número de pedimento (7 dígitos)", pattern="^[0-9]{7}$")
@field_validator('aduana')
def validate_aduana(cls, v):
if not v.isdigit():
raise ValueError('Aduana debe contener solo dígitos')
return v
@field_validator('patente')
def validate_patente(cls, v):
if not v.isdigit():
raise ValueError('Patente debe contener solo dígitos')
return v
@field_validator('pedimento')
def validate_pedimento(cls, v):
if not v.isdigit():
raise ValueError('Pedimento debe contener solo dígitos')
return v
class PedimentoRequest(PedimentoBaseSchema):
"""Esquema para solicitudes de pedimento"""
pedimento_id: str = Field(..., description="ID único del pedimento")
organizacion_id: str = Field(..., description="ID de la organización")
@field_validator('pedimento_id', 'organizacion_id')
def validate_ids(cls, v):
if not v or not v.strip():
raise ValueError('Los IDs no pueden estar vacíos')
return v.strip()
class PedimentoCompletoRequest(PedimentoBaseSchema):
"""Esquema para solicitar pedimento completo"""
username: str = Field(..., min_length=3, max_length=50, description="Usuario para autenticación")
password: str = Field(..., min_length=1, description="Contraseña para autenticación")
@field_validator('username')
def validate_username(cls, v):
if not v or not v.strip():
raise ValueError('Username no puede estar vacío')
return v.strip()
class EstadoPedimentoRequest(PedimentoBaseSchema):
"""Esquema para consultar estado de pedimento"""
username: str = Field(..., min_length=3, max_length=50, description="Usuario para autenticación")
password: str = Field(..., min_length=1, description="Contraseña para autenticación")
numero_operacion: str = Field(..., min_length=1, max_length=20, description="Número de operación del pedimento")
@field_validator('username')
def validate_username(cls, v):
if not v or not v.strip():
raise ValueError('Username no puede estar vacío')
return v.strip()
@field_validator('numero_operacion')
def validate_numero_operacion(cls, v):
if not v or not v.strip():
raise ValueError('Número de operación no puede estar vacío')
return v.strip()
class RemesasRequest(PedimentoBaseSchema):
"""Esquema para consultar remesas"""
username: str = Field(..., min_length=3, max_length=50, description="Usuario para autenticación")
password: str = Field(..., min_length=1, description="Contraseña para autenticación")
numero_operacion: str = Field(..., min_length=1, max_length=20, description="Número de operación del pedimento")
@field_validator('username')
def validate_username(cls, v):
if not v or not v.strip():
raise ValueError('Username no puede estar vacío')
return v.strip()
@field_validator('numero_operacion')
def validate_numero_operacion(cls, v):
if not v or not v.strip():
raise ValueError('Número de operación no puede estar vacío')
return v.strip()
class PedimentoResponse(BaseModel):
"""Esquema para respuestas de pedimento"""
success: bool = Field(..., description="Indica si la operación fue exitosa")
message: str = Field(..., description="Mensaje descriptivo de la operación")
pedimento_id: Optional[str] = Field(None, description="ID del pedimento procesado")
organizacion_id: Optional[str] = Field(None, description="ID de la organización")
task_id: Optional[str] = Field(None, description="ID de la tarea en segundo plano")
data: Optional[dict] = Field(None, description="Datos adicionales de la respuesta")
class Config:
json_schema_extra = {
"example": {
"success": True,
"message": "Pedimento procesado exitosamente",
"pedimento_id": "12345",
"organizacion_id": "org-123",
"task_id": "task-abc-123",
"data": {}
}
}