Documentations techniques

Ouverture d'une période
Documentation technique GRH — suivi d’ouverture de période / exercice (verrou 
RHOUV*, reprise phase A/B, droit 
TM_EXO, journal des événements).
Voir aussi la doc utilisateur.
1. Objectif
Sécuriser l’ouverture de période et d’exercice : un seul poste à la fois, reprise après coupure sans rejouer inutilement les étapes déjà OK, traçabilité dans le journal des événements.
2. Fichiers / unités
Copie de travail sous 
sources_modifiees/ouverture_periode/ — ne pas éditer directement les sources EIG.
  
Unité
Rôle
  
    
Mensuel.Periode.I_OuvertureSuivi
Enums, constantes timeout, interface suivi
    
Mensuel.Periode.U_OuvertureSuivi
Verrou, étapes, heartbeat, reprise
    
Mensuel.Periode.F_Ouverture
Orchestration PER/EXE, UI busy, reprise écran
    
d_GRHmain
Garde connexion (EN_COURS / INTERROMPU), droit après init
    
Menu.Fr_GRHMainMenu
Ouverture forcée reprise, 
act_exercices / 
TM_EXO
    
U_GRHNotificationDB
Heartbeat Notif_USER (session visible)
    
ddl/RHOUVPERIODE.sql
Tables Firebird + générateur
  
3. Tables
RHOUVPERIODE
  
Champ
Rôle
  
    
OUVID
PK (générateur 
RH_GENID_OUVPERIODE)
    
OUVSTATUT
0 EN_COURS · 1 INTERROMPU · 2 TERMINE · 3 ABANDONNE
    
OUVPERIODE
Index AAAAMM période cible
    
OUVUSER / 
OUVATTACH
Utilisateur / ConnectionID verrou
    
OUVHB
Dernier heartbeat
    
OUVETAPE / 
OUVMESSAGE
Étape courante / message
  
RHOUVETAPE : une ligne par étape (
ETAPCODE = 
TOuvEtape, statut A_FAIRE / EN_COURS / OK / KO / IGNORE).
4. Constantes d’activation / timing
  
Constante
Unité
Défaut
Rôle
  
    
      
C_USE_OUVERTURE_SUIVI
      
I_OuvertureSuivi
      
True
      
Active / coupe tout le suivi (verrou, étapes, heartbeat, reprise)
    
    
      
C_OUV_HB_TIMEOUT_SEC
      
I_OuvertureSuivi
      
90
      
Délai sans heartbeat avant 
INTERROMPU
    
    
      
C_OUV_HB_INTERVAL_SEC
      
I_OuvertureSuivi
      
15
      
Fréquence du heartbeat suivi
    
    
      
C_USE_NOTIF_USER_HEARTBEAT_THREAD
      
U_GRHNotificationDB
      
True
      
True = heartbeat USERCONNECT sur thread dédié ; 
False = WM_TIMER historique
    
  
5. Pipeline
Controles users → DemarrerSuivi (verrou) → alertes DSN / P99 / CanChange* → PreBascule → Bascule → PostOuverture → Terminer
* En reprise : alertes DSN / P99 / « forcer le changement » sautées.
  
ExecuterPreBascule — CHG_HOR (mois), TAUX_PAS, DSN, ARCH_*
  
ExecuterBascule — CLOSE_PER → BASCULE (trx) → DATE / INFO_ASSO / DEBLOC
  
ExecuterPostOuverture — ARCH_HISTO (EXE) → APRES_OUV → message → 
Terminer
Le verrou est posé avant les dialogues DSN / CanChange. Abandon d’un contrôle → 
AbandonnerSuiviSiActif.
6. Verrou & heartbeat
  
EN_COURS + heartbeat < 90 s → autre session refusée (« Réessayez plus tard »).
  
Process tué → heartbeat expire → INTERROMPU au prochain démarrage.
  
Fin OK → 
Terminer → TERMINE + arrêt heartbeat (déverrouillage immédiat).
  
Abandon / contrôles KO après démarrage → ABANDONNE.
7. Reprise phase A / B
  
Phase
Critère
Comportement
  
    
      
A
      
Période ouverte ≠ cible
      
Étapes pré-bascule déjà 
OK conservées. Reset seulement EN_COURS/KO.
    
    
      
B
      
Période ouverte = cible
      
Étapes ≤ bascule → IGNORE. Post-bascule → A_FAIRE. Ne pas re-basculer.
    
  
AssureInfoAssoGRH : en reprise, 
CanChangePeriode est sauté → recréer 
_InfoAssoGRH avant 
SaveToDB.
8. Droits
Menu : 
act_exercices.Enabled := CanOpen('TM_EXO')
Init : 
InitOpenOf('TM_EXO', FonctionOK(110,100) and DroitSurToutesSection)
  
Après 
doInitDroitsUsers : si reprise demandée et pas 
CanOpen('TM_EXO') → refus.
  
CheckExerciceExist / écran : même garde.
9. UI pendant traitement
  
SetUIOuvertureBusy — désactive boutons / navigation.
  
_INTRT — bloque Escape / fermeture (
CanClose := False).
10. Erreurs & arrêt
  
Cas
Comportement
  
    
      
Exception pendant ouverture / reprise
      
StopperOuvertureSurException → message, 
PasserInterrompu, journal, 
Application.Terminate
    
    
      
Contrôle métier KO
      
AbandonnerSuiviSiActif — pas d’arrêt appli
    
    
      
Refus droit TM_EXO
      
Exception / message — pas de traitement
    
  
11. Journal des événements
Traces via 
_GetBigBrother.AddEventGlobal (libellé UI : journal des événements). Source typique : 
F_SaisieExercices / 
D_GRHMain.