HR1 — architecture et logique game-specific Positionnement HR1 est le jeu By Year orienté gestion des ressources humaines : staffing, rémunération, avantages, postings, contrats, CEO et segments d'employés. Static data Les datasets importés incluent ceo, employees, strategies, advantages, events, scenario, segments, contracts et act_perf_pond, plus constants. Modèles Unity CeoData; EmployeeData / EmployeesAdvantage / AdvantageData; PostingData, LaunchedPosting, PostingResult; ContractData, ContractResult; Segment, SegmentResult, SegmentScores; TeamDecisionsHr1, TeamHr1, YearData. Hooks serveur GameSpecificUtilsHr1 gère entre autres le démarrage d'année, génération de contrats, reset des avantages, events, CEOs, coûts d'avantages, coûts de postings/licenciements, coûts employés et rankings. Génération flowchart LR DEC[Staffing + rémunération + avantages + postings] --> HIRE[Hiring] DEC --> RET[Retention / belonging] DEC --> COST[Employee costs] DEC --> CEO[CEO] HIRE --> RES[Segment Results] RET --> RES COST --> RES CEO --> RES RES --> SCORE[Scores / ActPerf] GenerateResultsHr1 finalise contrats et CEOs, calcule hiring, averages, retention/belonging, scores de postings et segments, puis sauvegarde les résultats. Évaluation EvalHr1 fournit scenario score, segment score et performance annuelle. Les résultats HR alimentent ensuite le cadre commun d'évaluation By Year. UI Les vues spécifiques comprennent CEO, staffing, employés, avantages, stratégies, postings, contrats, rémunération et rapports. Les classes sont sous Assets/GameSpecific/hr1/Src/UI. Debug Pour un problème RH, isoler d'abord la décision (employee/segment/posting/advantage), puis le coût calculé dans hr1_utils.js, puis la phase correspondante de GenerateResultsHr1. Ajouter une feature HR1 de A à Z Custom commands réelles hr1_custom_command.js route actuellement : posting / delete_posting; dismiss / delete_dismiss; advantage / delete_advantage; salary; ceo_bid / delete_ceo_bid; change_wanted_contracts; puis les commandes By Year communes en fallback. Ces commandes ne font pas que sauvegarder une valeur : elles recalculent souvent un coût, modifient cash, sauvegardent teams, parfois actDataGameSpec, puis envoient des RTT comme posting_changed, salary_changed, team_new_bid. Carte résultats finalizeContracts() — contrats; solveCeos() — résolution des CEO bids; computeAverages() — références du marché RH; computeHiring() — embauche; computeRetentionAndBelonging() — rétention/appartenance; computeScores() — scores; gatherSegments() — collecte des décisions par segment; generateCurrentYearResults() / saveResults(). Ajouter une nouvelle décision RH Définir si la décision appartient au segment, à l'employé, aux avantages, aux postings, CEO ou contrats. Ajouter la donnée au bon niveau de TeamDecisionsHr1/ YearData. Ajouter l'UI sous GameSpecific/hr1/Src/UI. Ajouter la branche dans hr1_custom_command.js. Calculer le coût avec un helper utilsHr1 partagé; ne pas dupliquer le calcul UI. Appliquer/refund le delta de cash correctement lors d'une édition/suppression. Envoyer le RTT approprié. Consommer la décision dans GenerateResultsHr1. Adapter EvalHr1.computeActPerfScore() si le score change. Vérifier reopen/delete results. CEO bids : exemple d'opération multi-document Un bid CEO modifie à la fois teams et un compteur dans actDataGameSpec.ceos via saveDocumentIncrementData(). Une nouvelle feature concurrentielle partagée entre équipes peut nécessiter le même pattern; il faut alors tester la concurrence entre plusieurs teams. Debug HR1 Quand un coût est faux : comparer static data → helper de coût → delta ancien/nouveau → cash sauvegardé. Quand le résultat annuel est faux : comparer segment decisions → averages → hiring/retention → result segment → ActPerf.