# Règles du contrôleur public de planning Le contrôleur (`controle_planning.py`) relit le **dossier d'entrée** et le **planning produit**, puis rend `PASS` (toutes les règles obligatoires tenues) ou `FAIL` (au moins une règle obligatoire violée, avec la liste des violations). Il ne corrige rien et ne remplace pas la relecture par la personne responsable du service. ## Entrées - `dossier-planning-internes.xlsx` : onglets « Mode d'emploi » (période), « Équipe et compétences », « Besoins par service », « Gardes », « Absences », « Astreintes », « Règles ». En-têtes en ligne 4. - Note de service `mise-a-jour-absence.docx` (ou son jumeau `.md`) : `Interne`, `Date`, `Créneau` de l'indisponibilité qui remplace la ligne « Remplacée par la note Word » du classeur. - Planning produit : classeur `.xlsx` dont l'onglet s'appelle « Planning », ou fichier `.csv` (séparateur `;` ou `,`), avec les colonnes **Date, Créneau, Activité, Service, Interne** (en-tête dans les dix premières lignes). - Créneau : `Matin`, `Après-midi`, `Nuit`, `Journée entière` ; - Activité : `Service`, `Garde`, `Astreinte`, `Repos post-garde`, `Demi-journée libre` ; - Interne : code (`INT-03`) ou libellé du classeur (`Interne Cèdre`). ## Règles obligatoires (FAIL si violées) | N° | Règle | |---|---| | H-01 | Chaque besoin (jour ouvré × créneau × service) reçoit exactement l'effectif requis ; aucun service hors besoin. | | H-02 | Un interne occupe au plus un service par demi-journée. | | H-03 | Toute affectation de service exige la compétence `OUI` correspondante. | | H-04 | Aucun service, astreinte (ni garde, pour une absence d'une journée entière) pendant une indisponibilité active. | | H-05 | Chaque garde est suivie d'un « Repos post-garde » le lendemain, y compris le lendemain de la période. | | H-06 | Aucun service ni astreinte pendant un repos post-garde. | | H-07 | Les gardes préaffectées sont reproduites à l'identique, une par date, sans garde ajoutée. | | H-08 | Les astreintes du samedi sont exactement celles du tableau dédié. | | H-09 | L'interne d'astreinte n'est ni de garde ce samedi ni en repos après la garde du vendredi. | | H-10 | Aucune ligne dupliquée, hors période ou pour un interne inconnu. | | H-11 | Écart du nombre total de gardes entre internes ≤ 1. | | H-12 | Écart du nombre de gardes de samedi et dimanche entre internes ≤ 1. | | H-13 | La note de service prévaut : aucune activité sur le créneau d'indisponibilité qu'elle fixe. | ## Objectifs (rapportés, jamais bloquants) - S-01 : une demi-journée libre par interne et par semaine ; - S-02 : écart des charges de service entre internes (minimum, maximum). ## Contrôleur du créneau commun `controle_agenda.py` recalcule depuis `agendas.json` le créneau le plus tôt qui respecte horaires, pause, jours exclus et agendas, puis vérifie le fichier `.ics` produit (règles A-01 à A-06, décrites en tête du script) : un seul rendez-vous, début et fin datés sans ambiguïté, bonne durée, aucune contrainte violée, créneau le plus tôt, et horodatage de création (`DTSTAMP`) présent et non postérieur au contrôle. Les noms de fuseau Windows courants (« Romance Standard Time ») sont reconnus.