package sincronizacionDatos import ( "daemonService/internal/models" "daemonService/internal/models/sincronizacionDatos/request" "daemonService/internal/repositories" "daemonService/internal/services/utils" "daemonService/internal/soap" "fmt" "log" "net/http" ) func ProcesarRegistro(s *models.ServiceModel, solicitud request.SolicitudSincronizacion, cuisID int) (interface{}, error) { log.Printf("Procesando código sistema: %s", solicitud.CodigoSistema) // 1. Generar solicitud SOAP soapReq, err := GenerarSOAPRequest(s, solicitud) if err != nil { return nil, fmt.Errorf("error generando SOAP: %v", err) } // 2. Enviar solicitud con reintentos resp, bodyBytes, err := soap.EnviarSOAPRequest(s, soapReq) if err != nil { return nil, fmt.Errorf("error enviando SOAP: %v", err) } defer resp.Body.Close() // 3. Validar respuesta HTTP if resp.StatusCode != http.StatusOK { return nil, fmt.Errorf("código de estado HTTP inválido: %d", resp.StatusCode) } // 4. Parsear respuesta respSincronizacion, err := utils.ProcesarRespuestaSincronizacion(s.TagNames, bodyBytes) if err != nil { return nil, err } // 5. Guardar en base de datos if err := repositories.GuardarRegistro(s, solicitud, cuisID, soapReq, bodyBytes, respSincronizacion); err != nil { return nil, fmt.Errorf("error guardando registro: %v", err) } return respSincronizacion, nil }