Primera version estable de microservicios

This commit is contained in:
2025-07-28 11:04:18 -06:00
parent 42a564cd74
commit 5f58fabcfe
37 changed files with 5079 additions and 0 deletions

0
schemas/__init__.py Normal file
View File

8
schemas/acuseSchema.py Normal file
View File

@@ -0,0 +1,8 @@
from fastapi import FastAPI
from pydantic import BaseModel
from uuid import UUID
class AcuseSchema(BaseModel):
document_id: str

112
schemas/pedimentoSchema.py Normal file
View File

@@ -0,0 +1,112 @@
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": {}
}
}

46
schemas/serviceSchema.py Normal file
View File

@@ -0,0 +1,46 @@
from pydantic import BaseModel, Field, field_validator
from typing import Optional
class ServiceBaseSchema(BaseModel):
"""Esquema base para servicios con campos comunes"""
estado: int = Field(..., description="ID único del servicio")
tipo_procesamiento: int = Field(..., description="ID de la organización")
pedimento: str = Field(..., description="ID del estado del servicio")
servicio: int = Field(..., description="ID del tipo de servicio")
organizacion: str = Field(..., description="ID de la organización")
@field_validator('pedimento', 'organizacion')
def validate_string_fields(cls, v):
if not v or not v.strip():
raise ValueError('Los campos de texto no pueden estar vacíos')
return v.strip()
@field_validator('estado', 'tipo_procesamiento', 'servicio')
def validate_numeric_ids(cls, v):
if v is None or v < 0:
raise ValueError('Los IDs numéricos deben ser números positivos')
return v
class ServiceUpdateRequest(ServiceBaseSchema):
"""Esquema para actualizar un servicio"""
id: int = Field(..., description="ID del servicio a actualizar")
@field_validator('id')
def validate_id(cls, v):
if v is None or v < 0:
raise ValueError('El ID debe ser un número positivo')
return v
class ServiceRemesaSchema(BaseModel):
"""Esquema para remesas de servicios"""
organizacion: str = Field(..., description="ID de la organización")
pedimento: str = Field(..., description="ID del pedimento")
@field_validator('organizacion', 'pedimento')
def validate_string_fields(cls, v):
if not v or not v.strip():
raise ValueError('Los campos de texto no pueden estar vacíos')
return v.strip()

15
schemas/vucemSchema.py Normal file
View File

@@ -0,0 +1,15 @@
from fastapi import FastAPI
from pydantic import BaseModel
from uuid import UUID
class VucemSchema(BaseModel):
id: str
organization_id: str
user: str
password: str
patente: str
is_active: bool
is_importer: bool
acuseCove: bool
acuseedocument: bool