Se modificaron endpoints

This commit is contained in:
2025-08-15 13:12:59 -06:00
parent 705fa1eb8f
commit 6a597549f9
2 changed files with 3 additions and 255 deletions

View File

@@ -13,8 +13,6 @@ logger = logging.getLogger(__name__)
router = APIRouter()
@router.post("/async/services/pedimento_completo")
async def async_get_pedimento_completo(request: ServiceRemesaSchema):
"""
@@ -204,7 +202,6 @@ async def cancel_task(task_id: str):
detail=f"Error al cancelar la tarea: {str(e)}"
)
@router.post("/async/services/partidas")
async def async_get_partidas(request: ServiceRemesaSchema):
"""

View File

@@ -34,255 +34,6 @@ ESTADO_ERROR = 4
router = APIRouter()
logger = logging.getLogger(__name__)
@router.post("/services/estado_pedimento")
async def get_estado_pedimento(request: ServiceRemesaSchema):
"""
Obtiene el estado actual de un pedimento mediante consulta SOAP a VUCEM.
Este endpoint:
1. Obtiene el servicio de estado de pedimento existente
2. Actualiza estado a "en proceso"
3. Obtiene credenciales VUCEM
4. Realiza petición SOAP para consultar estado
5. Procesa y retorna información del estado
Args:
request: ServiceBaseSchema con pedimento y organización
Returns:
JSONResponse con estado actual del pedimento
Raises:
HTTPException: En caso de errores de validación o procesamiento
"""
operation_name = "estado_pedimento"
service_data = None
try:
# Validar datos de entrada
request_data = request.model_dump()
await _validate_request_data(request_data)
logger.info(f"Iniciando consulta de estado de pedimento - Pedimento: {request_data['pedimento']}")
# Obtener servicio de estado de pedimento existente
service_data = await _get_pedimento_service(
pedimento_id=request_data['pedimento'],
service_type=1,
operation_name=operation_name
)
# Actualizar estado a "En proceso"
update_success = await _update_service_status(
service_data['id'], ESTADO_EN_PROCESO, service_data, operation_name
)
if not update_success:
raise HTTPException(status_code=500, detail="Error al actualizar estado del servicio")
# Obtener credenciales VUCEM
contribuyente_id = service_data.get('pedimento', {}).get('contribuyente', '')
if not contribuyente_id:
logger.error("No se encontró ID de contribuyente en los datos del servicio")
await _update_service_status(service_data['id'], ESTADO_ERROR, service_data, operation_name)
raise HTTPException(status_code=400, detail="ID de contribuyente no encontrado")
credentials = await _get_vucem_credentials(contribuyente_id, operation_name)
# Procesar petición SOAP para obtener estado del pedimento
logger.info("Realizando petición SOAP para estado del pedimento...")
try:
soap_response = await get_estado_pedimento(
credenciales=credentials,
response_service=service_data,
soap_controller=soap_controller
)
if not soap_response:
raise HTTPException(status_code=500, detail="Error en la petición SOAP para estado del pedimento")
logger.info("Petición SOAP para estado del pedimento completada exitosamente")
except HTTPException:
await _update_service_status(service_data['id'], ESTADO_ERROR, service_data, operation_name)
raise
except Exception as e:
logger.error(f"Error en petición SOAP para estado del pedimento: {e}")
await _update_service_status(service_data['id'], ESTADO_ERROR, service_data, operation_name)
raise HTTPException(status_code=500, detail="Error en la petición SOAP al servicio VUCEM")
# Finalizar servicio exitosamente
await _update_service_status(service_data['id'], ESTADO_FINALIZADO, service_data, operation_name)
# Crear respuesta estandarizada
response_data = await _create_response(
service_data=service_data,
additional_data={
"estado_pedimento": soap_response,
"documento": soap_response.get('documento', {}),
"xml_content": soap_response.get('xml_content', {})
},
success_message="Estado del pedimento consultado exitosamente"
)
logger.info(f"Consulta de estado de pedimento completada exitosamente - Servicio: {service_data['id']}")
return JSONResponse(content=response_data, status_code=200)
except HTTPException:
# Re-lanzar HTTPExceptions sin modificar
raise
except Exception as e:
pass
logger.error(f"Error inesperado en {operation_name}: {e}")
@router.post("/services/listar_pedimentos")
async def get_listar_pedimentos(request: ServiceRemesaSchema):
"""
Lista pedimentos disponibles en el sistema VUCEM para una organización.
Este endpoint:
1. Obtiene el servicio de listado de pedimentos existente
2. Actualiza estado a "en proceso"
3. Obtiene credenciales VUCEM
4. Consulta lista de pedimentos en VUCEM
5. Procesa y retorna la lista de pedimentos
Args:
request: ServiceBaseSchema con pedimento y organización
Returns:
JSONResponse con lista de pedimentos disponibles
Raises:
HTTPException: En caso de errores de validación o procesamiento
"""
operation_name = "listar_pedimentos"
service_data = None
try:
# Validar datos de entrada
request_data = request.model_dump()
await _validate_request_data(request_data)
logger.info(f"Iniciando listado de pedimentos - Organización: {request_data['organizacion']}")
# Obtener servicio de listado de pedimentos existente
# Nota: Asumiendo que existe un tipo de servicio para listado (tipo 8)
# Ajustar el tipo según la configuración del sistema
try:
services = await rest_controller.get_pedimento_services(
request_data['pedimento'],
service_type=8 # Tipo para listado de pedimentos
)
if not services or len(services) == 0:
logger.error(f"No se encontró servicio de listado de pedimentos")
raise HTTPException(status_code=404, detail="Servicio de listado no encontrado")
service_data = services[0]
logger.info(f"Servicio de listado obtenido: {service_data.get('id', 'N/A')}")
except HTTPException:
raise
except Exception as e:
logger.error(f"Error al obtener servicio de listado: {e}")
raise HTTPException(status_code=500, detail="Error al obtener servicio de listado")
# Actualizar estado a "En proceso"
update_success = await _update_service_status(
service_data['id'], ESTADO_EN_PROCESO, service_data, operation_name
)
if not update_success:
raise HTTPException(status_code=500, detail="Error al actualizar estado del servicio")
# Obtener credenciales VUCEM
contribuyente_id = service_data.get('pedimento', {}).get('contribuyente', '')
if not contribuyente_id:
logger.error("No se encontró ID de contribuyente en los datos del servicio")
await _update_service_status(service_data['id'], ESTADO_ERROR, service_data, operation_name)
raise HTTPException(status_code=400, detail="ID de contribuyente no encontrado")
credentials = await _get_vucem_credentials(contribuyente_id, operation_name)
# Consultar pedimentos en VUCEM
logger.info("Consultando pedimentos disponibles en VUCEM...")
try:
# Nota: Este endpoint requiere implementar la función específica en utils/peticiones.py
# Por ahora, simularemos la respuesta básica
# TODO: Implementar get_soap_lista_pedimentos en utils/peticiones.py
# soap_response = await get_soap_lista_pedimentos(
# credenciales=credentials,
# response_service=service_data,
# soap_controller=soap_controller
# )
# Respuesta simulada para demostrar la estructura
soap_response = {
"pedimentos": [
{
"id": "PED001",
"numero": "24 44 1234 5678901",
"fecha": "2024-12-19",
"estado": "Tramitado",
"patente": "1234",
"aduana": "44"
}
],
"total": 1,
"documento": {
"filename": "lista_pedimentos.xml",
"size": 1024
}
}
logger.info(f"Se encontraron {soap_response.get('total', 0)} pedimentos")
except Exception as e:
logger.error(f"Error en consulta SOAP de pedimentos: {e}")
await _update_service_status(service_data['id'], ESTADO_ERROR, service_data, operation_name)
raise HTTPException(status_code=500, detail="Error en la consulta SOAP al servicio VUCEM")
# Finalizar servicio exitosamente
await _update_service_status(service_data['id'], ESTADO_FINALIZADO, service_data, operation_name)
# Crear respuesta estandarizada
response_data = await _create_response(
service_data=service_data,
additional_data={
"pedimentos": soap_response.get('pedimentos', []),
"total_pedimentos": soap_response.get('total', 0),
"documento": soap_response.get('documento', {}),
"fecha_consulta": "2024-12-19T12:00:00Z"
},
success_message=f"Se encontraron {soap_response.get('total', 0)} pedimentos disponibles"
)
# Agregar advertencia si no se encontraron pedimentos
if soap_response.get('total', 0) == 0:
response_data["warnings"] = [
"No se encontraron pedimentos disponibles en el periodo consultado"
]
logger.info(f"Listado de pedimentos completado - Total: {soap_response.get('total', 0)}")
return JSONResponse(content=response_data, status_code=200)
except HTTPException:
# Re-lanzar HTTPExceptions sin modificar
raise
except Exception as e:
logger.error(f"Error inesperado en {operation_name}: {e}")
logger.error(f"Traceback: {traceback.format_exc()}")
# Actualizar estado a error si tenemos service_data
if service_data:
try:
await _update_service_status(service_data['id'], ESTADO_ERROR, service_data, operation_name)
except Exception as update_error:
logger.error(f"Error al actualizar estado del servicio tras fallo: {update_error}")
raise HTTPException(status_code=500, detail=f"Error interno en {operation_name}: {str(e)}")
@router.post("/services/pedimento")
async def get_pedimento(request: ServiceBaseSchema):
"""
@@ -350,7 +101,7 @@ async def get_pedimento_completo(request: ServiceRemesaSchema):
logger.info(f"Iniciando procesamiento de pedimento completo - Pedimento: {request_data['pedimento']}")
# Obtener servicio de remesas existente
# Obtener servicio
service_data = await _get_pedimento_service(
pedimento_id=request_data['pedimento'],
service_type=3,
@@ -1086,7 +837,7 @@ async def get_edocument(request: ServiceRemesaSchema):
raise HTTPException(status_code=500, detail=f"Error interno en {operation_name}: {str(e)}")
@router.post("/services/coves") # Sin Testear
@router.post("/services/coves")
async def get_cove(request: ServiceRemesaSchema):
"""
@@ -1253,7 +1004,7 @@ async def get_cove(request: ServiceRemesaSchema):
raise HTTPException(status_code=500, detail=f"Error interno en {operation_name}: {str(e)}")
@router.post("/services/acuseCove") # Sin Testear
@router.post("/services/acuseCove")
async def get_Acusecove(request: ServiceRemesaSchema):
"""
Obtiene los acuses de COVE de un pedimento mediante peticiones SOAP a VUCEM.