Custom activity field not populating correctly

Hi,
I’ve made this script with the help of Google Gemini to calculate the actual date/time of my Garmin recovery time. There is only one problem; I have to re-analyze the activity to get it to populate correctly.
Does anyone have a solution for this? So that I don’t have to re-analyze every time I upload a new activity?

try {
  // --- PRE-CALCULATION FOR LOGGING ---
  var totalSecondsForLog = activity.elapsed_time;
  var hoursForLog = Math.floor(totalSecondsForLog / 3600);
  var minutesForLog = Math.floor((totalSecondsForLog % 3600) / 60);
  var secondsForLog = totalSecondsForLog % 60;
  var elapsedTimeFormatted = String(hoursForLog).padStart(2, '0') + ":" +
                             String(minutesForLog).padStart(2, '0') + ":" +
                             String(secondsForLog).padStart(2, '0');

  // --- STEP 1: CALCULATE WORKOUT END TIME ---
  var workoutStartDate = new Date(activity.start_date);
  var workoutEndDate = new Date(workoutStartDate.getTime());
  workoutEndDate.setSeconds(workoutEndDate.getSeconds() + activity.elapsed_time);

  // --- STEP 2: CALCULATE RECOVERY DURATION ---
  var durationInHours = activity.isNew ? activity.RecoveryTime / 60 : activity.RecoveryTime;
  var recoveryDurationInSeconds = Math.round(durationInHours * 3600);

  // --- STEP 3: CALCULATE FINAL TARGET DATE ---
  var finalTargetDateUtc = new Date(workoutEndDate.getTime());
  finalTargetDateUtc.setSeconds(finalTargetDateUtc.getSeconds() + recoveryDurationInSeconds);

  // --- STEP 4: FORMATTING FOR DISPLAY AND LOGGING ---
  var timezoneOffsetHours = 2;

  // Format the Workout End Time for logging
  var workoutEndDay = String(workoutEndDate.getUTCDate()).padStart(2, '0');
  var workoutEndMonth = String(workoutEndDate.getUTCMonth() + 1).padStart(2, '0');
  var workoutEndYear = workoutEndDate.getUTCFullYear();
  var workoutEndHours = workoutEndDate.getUTCHours() + timezoneOffsetHours;
  if (workoutEndHours >= 24) { workoutEndHours -= 24; }
  var workoutEndHoursPadded = String(workoutEndHours).padStart(2, '0');
  var workoutEndMinutes = String(workoutEndDate.getUTCMinutes()).padStart(2, '0');
  var workoutEndSeconds = String(workoutEndDate.getUTCSeconds()).padStart(2, '0');
  var workoutEndDateFormatted = workoutEndDay + "-" + workoutEndMonth + "-" + workoutEndYear + " " +
                                workoutEndHoursPadded + ":" + workoutEndMinutes + ":" + workoutEndSeconds;

  // Format the Final Recovery Date for display
  var finalDay = String(finalTargetDateUtc.getUTCDate()).padStart(2, '0');
  var finalMonth = String(finalTargetDateUtc.getUTCMonth() + 1).padStart(2, '0');
  var finalYear = finalTargetDateUtc.getUTCFullYear();
  var finalHours = finalTargetDateUtc.getUTCHours() + timezoneOffsetHours;
  if (finalHours >= 24) { finalHours -= 24; }
  var finalHoursPadded = String(finalHours).padStart(2, '0');
  var finalMinutes = String(finalTargetDateUtc.getUTCMinutes()).padStart(2, '0');
  var finalSeconds = String(finalTargetDateUtc.getUTCSeconds()).padStart(2, '0');
  var finalDisplayString = finalDay + "-" + finalMonth + "-" + finalYear + " " +
                           finalHoursPadded + ":" + finalMinutes + ":" + finalSeconds;

  // --- FINAL LOG OUTPUT ---
  console.log("--- RECOVERY CALCULATION BASIS ---");
  console.log("Input RecoveryTime (hours):", activity.RecoveryTime);
  console.log("Input Elapsed Time (hh:mm:ss):", elapsedTimeFormatted);
  console.log("Workout End Time (Local):", workoutEndDateFormatted);
  console.log("Final Calculated Result:", finalDisplayString);
  console.log("------------------------------------");

  finalDisplayString;

} catch (e) {
  "Error in script. Check logs.";
}