diff --git a/api/api_v1/endpoints/async_pedimentos.py b/api/api_v1/endpoints/async_pedimentos.py index 41e2803..6ddddeb 100644 --- a/api/api_v1/endpoints/async_pedimentos.py +++ b/api/api_v1/endpoints/async_pedimentos.py @@ -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): """ diff --git a/api/api_v1/endpoints/pedimentos.py b/api/api_v1/endpoints/pedimentos.py index 8cba332..8507ff0 100644 --- a/api/api_v1/endpoints/pedimentos.py +++ b/api/api_v1/endpoints/pedimentos.py @@ -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.