diff --git a/engine/__pycache__/logger.cpython-313.pyc b/engine/__pycache__/logger.cpython-313.pyc index 48fff97..2bdd531 100644 Binary files a/engine/__pycache__/logger.cpython-313.pyc and b/engine/__pycache__/logger.cpython-313.pyc differ diff --git a/engine/engine_components/__pycache__/process_course.cpython-313.pyc b/engine/engine_components/__pycache__/process_course.cpython-313.pyc index 6a4c930..21cb0c1 100644 Binary files a/engine/engine_components/__pycache__/process_course.cpython-313.pyc and b/engine/engine_components/__pycache__/process_course.cpython-313.pyc differ diff --git a/engine/engine_components/process_course.py b/engine/engine_components/process_course.py index cd7b4f6..38f9c97 100644 --- a/engine/engine_components/process_course.py +++ b/engine/engine_components/process_course.py @@ -162,7 +162,6 @@ def process_course(cur, cnx, con_id: int): det_id = tp_info["det_id"] detail_table = f"resultv2_{con_id}_detail" - # ------------------------------------------------- # Règle de priorité (peut rejeter ou forcer tour) # ------------------------------------------------- @@ -177,6 +176,49 @@ def process_course(cur, cnx, con_id: int): det_id, tp_config ) + + # ------------------------------------------------- + # Gestion mémoire locale selon la règle de priorité + # ------------------------------------------------- + + # Si la lecture courante est rejetée par priorité : + if status == 0 and reason_code in ("REPLACED_BY_HIGHER_PRIORITY", "LOWER_PRIORITY"): + # On doit retirer l'ancienne lecture valide de la mémoire + if (tp_id, dossard) in _last_valid_read: + del _last_valid_read[(tp_id, dossard)] + + # Si la lecture courante remplace une lecture existante : + elif reason_code == "REPLACED_BY_HIGHER_PRIORITY": + # La nouvelle lecture devient la base correcte pour les intervalles + _last_valid_read[(tp_id, dossard)] = dt_local + + + + + # ------------------------------------------------- + # Si la priorité a déjà rejeté la lecture, on n'applique pas les autres règles + # ------------------------------------------------- + if status == 0: + insert_detail_record( + cur, cnx, con_id, + dossard, lec, + tp_id, tp_name, + chr_loc, prio, controller, + dt_utc, + status=status, + reason_code=reason_code, + reason_ref_id=reason_ref_id, + tour=None, + tempstour=None, + tempstour_str=None + ) + continue + + + + + + # ------------------------------------------------- # Règle d'intervalle minimum entre lectures @@ -205,6 +247,23 @@ def process_course(cur, cnx, con_id: int): reason_ref_id = det_id log_debug(f"[SKIP INTERVAL] id={rcourse_id} {delta:.1f}s < {interval_sec}s") + insert_detail_record( + cur, cnx, con_id, + dossard, lec, + tp_id, tp_name, + chr_loc, prio, controller, + dt_utc, + status=status, + reason_code=reason_code, + reason_ref_id=reason_ref_id, + tour=None, + tempstour=None, + tempstour_str=None + ) + continue + + + # ------------------------------------------------- # Calcul du tour + temps de tour # -------------------------------------------------