# Mémoire — planning-equipe → **PLANNING TEAM**

**Statut : 🟢 Lots 1, 2, 5 construits et lot 4 préparé — reste à héberger, et les exports (3)**
Créé le 21/08/2026 · Mise à jour : 26/08/2026

## ▶️ Lancer l'outil

Double-cliquer **`Lancer-Planning-Team.cmd`** (port 8767). Deux pages :
- **`Planning-Team.html`** — la gestion, quatre onglets : *Cycle de référence*, *Semaines
  réelles*, *Absences et congés*, *Demandes* ;
- **`Mon-Planning.html`** — la page de l'équipe, pensée mobile (un sélecteur de personne
  remplace les comptes en attendant le lot 4).

Toute la base tient dans **`travail\planning.db`** : la sauvegarder, c'est copier ce fichier.

### Les modules

| Fichier | Rôle |
|---|---|
| `travail\base.py` | Cycle de référence, import du classeur, présence, contrôles |
| `travail\calendrier.py` | Semaines ISO, jours fériés calculés, vacances scolaires zone A |
| `travail\conges.py` | Absences, soldes de CP, corrections tracées |
| `travail\reel.py` | Planning daté = cycle − absences − fériés, retouches par date, remplaçants, récupération |
| `travail\demandes.py` | Demandes de l'équipe, impact simulé, circuit de validation |
| `travail\comptes.py` | Comptes, rôles, mots de passe, invitations, sessions |
| `travail\sauvegarde.py` | Copie quotidienne vérifiée, purge, restauration |
| `serveur.py` | L'API, le contrôle d'accès, le cloisonnement et les pages |

Pages : `Planning-Team.html` (gestion, 5 onglets) · `Mon-Planning.html` (équipe) ·
`Connexion.html` · `Premiere-Connexion.html`.

### Sécurité — l'essentiel en trois points

1. **La connexion est désactivée** tant que l'outil est local. **À activer avant toute
   mise en ligne** (onglet Accès). L'outil refuse de l'activer si aucun compte de gestion
   n'a de mot de passe.
2. **Le cloisonnement se fait dans la réponse du serveur, pas dans la page.** Un compte
   « équipe » voit les horaires de ses collègues, jamais leurs heures, contrats, soldes
   ni motifs d'absence. Vérifié par un test qui tape directement les adresses.
3. **Les mots de passe sont choisis par les salariés** via un lien d'invitation à usage
   unique : Jérôme ne les connaît pas. En cas d'oubli, il pose un provisoire.

> **Dossier de travail : `Dropbox\JEROME PERSO\IA`** (décision du 26/08/2026 — Dropbox est
> désormais le dossier principal, plus un miroir).

## 🎯 Objectif

**PLANNING TEAM — Grande Pharmacie de Morancé** : une application web qui fait vivre les
plannings de l'équipe officinale (13 personnes) et alimente le circuit de paie avec le
cabinet comptable FRS.

Deux faces :
- **gestion** (Jérôme + Aurore) : construire le planning, valider les congés, produire la
  fiche navette et le mail au cabinet ;
- **équipe** (les 13 salariés, sur téléphone) : consulter son planning, demander un congé,
  signaler une absence, proposer un échange de créneau.

## 🔒 Données sensibles

Données nominatives de 13 personnes (heures contrat, congés, absences). Décisions prises :
- **hébergement chez un hébergeur français** (OVH / Scaleway / Infomaniak), au nom de Jérôme ;
- **les arrêts de travail ne transitent pas par l'application** : l'outil ne connaît que
  « absent, arrêt maladie, du X au Y ». Le PDF du médecin reste en local et part au cabinet
  depuis le poste. Pas de données de santé hébergées ;
- ne rien déposer de sensible dans le dossier synchronisé Dropbox.

Reste à cadrer : authentification par personne, chiffrement au repos, durée de conservation,
information des salariés, sauvegardes.

## 📍 Où on en est

**Cadrage terminé le 26/08/2026** : les 33 questions de `docs\Questions-cadrage.md` ont été
posées une par une et répondues. Toutes les réponses sont dans
**`docs\Reponses-cadrage.md`** — c'est le document de référence du projet.
Rien n'est encore construit.

### Les décisions qui structurent tout

| Sujet | Décision |
|---|---|
| **Cycle** | Rotation sur **2 semaines** (S1 / S2). L'ancienne rotation 4 semaines A1/B2/C1/D2 est abandonnée. |
| **Contrat** | Une **moyenne hebdomadaire sur le cycle de 2 semaines**, pas un volume fixe. Vérifié sur les 11 salariés. |
| **Construction** | **Reconduction du cycle** : il se répète, on ne saisit que les exceptions. **Pas de moteur d'optimisation à écrire.** |
| **Contrôles** | Deux seulement : au moins **1 pharmacien** en permanence, et au moins **3 personnes** au comptoir sauf la dernière demi-heure. |
| **Excel** | Lu au début (import), remplacé ensuite. Export Excel ancien format pendant la transition. |
| **Forme** | **Tout en ligne**, hébergeur français. Rupture avec les autres outils, tous locaux. |
| **Historique** | **Démarrage à septembre 2026**, soldes de CP saisis à la main. Pas d'import de 2025/2026. |
| **Priorité** | **Aucune urgence** : septembre est déjà géré à la main. |

### Effectif de référence (feuilles « Gwen à 80% »)

Aurore Labroy (32 h, pharmacien) · Nicolas Coué (35, pharmacien) · Sariaka Rakotoanadahy
(35, pharmacien) · Marie-Cécile Barthelet (27, pharmacien) · Valérie Chantemesse (35, prép.) ·
Élodie Lescovec (35, prép., **AJPP**) · Gwendoline Venet (28, prép., **80 %**) ·
Stéphanie Passot (35, prép.) · Thomas Jamet (35, **préparateur** — plus apprenti) ·
Chloé Constant (18, apprentie) · Patricia Pognant-Gros (28, rayonniste) ·
Manon et Lilou (étudiantes, heures variables).

Détail, souhaits et désidérata de chacun : `docs\Reponses-cadrage.md`.

### Identité visuelle

Charte dans **`docs\charte\CHARTE.md`**, logo dans `docs\charte\logo-pharmacie-morance.jpg`.
Couleurs prélevées dans le logo : turquoise `#7AC7C1`, anthracite `#5A5B5D`, plus des
variantes accessibles (`#2E7A75`, `#1F6763`, `#3A3B3D`).

## ⏭️ Prochaines étapes

- [ ] **Envoyer le mail à Betty** — brouillon Gmail prêt le 26/08/2026 (« Bascule SILAE en
      octobre 2026 »), il regroupe les trois questions ouvertes : format des variables après
      SILAE, matricules de la ligne 1, décompte des CP en cours de journée.
      ⚠️ Le brouillon est dans **persomorance@gmail.com** ; les envois de paie partent
      habituellement de **pharmaciedemorance@gmail.com** — à recopier si besoin.
- [x] ~~Analyser `docs\fiche navette 2026.xlsx`~~ → fait le 26/08/2026,
      voir **`docs\Analyse-fiche-navette.md`**
- [x] ~~Règle des tickets restaurant~~ → confirmée : **1 ticket par jour travaillé comportant
      une pause déjeuner**, rien pour les demi-journées
- [x] ~~Lilou absente de la fiche navette~~ → normal, elle **arrive en septembre 2026** et sera
      traitée **comme Manon** (étudiante payée à l'heure)
- [ ] Analyser `docs\Planning heures supplémentaires 2026.xlsx` → format du suivi HS / récup
- [ ] Relancer Betty sur le décompte des CP en cas de retour en cours de journée
      (mail de Marie-Cécile du 19/06/2025, resté sans réponse)
- [x] ~~Désactiver la tâche « Sync IA vers Dropbox » sur le poste de la pharmacie~~ → vérifié le
      26/08/2026 : **aucune tâche planifiée de ce nom sur le poste PHARMACIE**, et l'ancien
      `C:\Users\PHARMACIE\IA` existe mais est **vide**. Reste éventuellement à nettoyer
      `README.md` et `_outils\sync-ia.ps1` s'ils mentionnent encore le miroir
- [x] ~~Installer Python 3~~ → fait le 26/08/2026 sur le PC **JEROME** :
      **Python 3.13.15** (`C:\Users\perso\AppData\Local\Programs\Python\Python313\`),
      sqlite3 3.50.4 inclus. Installé via `winget`, portée utilisateur.
- [ ] Confirmer que **S1 = semaines ISO impaires** (samedis de Gwendoline)
- [ ] Trancher : Manon et Lilou dans le cycle de référence, ou en exception semaine par semaine ?
- [ ] Élodie : comment l'AJPP se traduit-elle dans le planning (18 h hors AJPP en S1, 26,5 h en S2) ?
- [ ] Produire le logo en PNG transparent et en SVG
- [x] ~~**Lot 1** : cycle de référence + grille + compteurs + les deux contrôles~~ →
      **fait le 26/08/2026**. Lancer avec `Lancer-Planning-Team.cmd` (port 8767).
      Fichiers : `serveur.py`, `Planning-Team.html`, `travail\base.py`, `travail\planning.db`.
      L'import du classeur reproduit **exactement** les heures des feuilles « Gwen à 80% »
      (13 salariés, 158 créneaux) et le cycle ne déclenche **aucune alerte**.
- [x] ~~**Lot 2** : absences, congés, soldes de CP, compteur de récupération~~ → **fait**.
      Calendrier réel 2026-2027, fériés calculés, vacances scolaires zone A, soldes importés
      du classeur des congés, corrections manuelles tracées, retouches du planning par date.
- [x] ~~**Lot 5** : demandes de l'équipe~~ → **fait** (avancé avant la mise en ligne).
      Page mobile, circuit demande → validation, échanges à trois étapes, impact calculé.
- [x] ~~**Lot 4 — préparation**~~ → **fait** : comptes et rôles, mots de passe choisis par
      les salariés via lien d'invitation, sessions, cloisonnement vérifié par test,
      sauvegardes quotidiennes vérifiées, dossier RGPD (`docs\RGPD.md`).
- [ ] **Lot 4 — mise en ligne** : reste le concret. Sous-domaine, serveur chez un
      hébergeur français, HTTPS, **activer la connexion**, poser les mots de passe,
      remettre la note d'information à l'équipe.
- [ ] **Lot 3 — exports** : PDF équipe, PDF cabinet, fiche navette, Excel ancien format.
      ⚠️ Toujours bloqué par la réponse de Betty sur SILAE.
- [ ] Faire confirmer par Jérôme : Chloé à 19,25 h de moyenne pour 18 h de contrat ;
      les notes AJPP d'Élodie (18 h en S1, 26,5 h en S2) ; comment sont planifiées Manon et Lilou
- [ ] Concevoir l'application, puis construire

## 🧭 Décisions prises

| Date | Décision | Pourquoi |
|---|---|---|
| 21/08/2026 | Création du projet | Sujet distinct de [[virements]] et [[rapprochement-factures]] |
| 21/08/2026 | Questionnaire de 33 questions avant de coder | Périmètre large ; l'hébergement engage des choix de confidentialité |
| 26/08/2026 | Cadrage complet, question par question en choix cliquables | Format demandé par l'utilisateur — nettement plus rapide qu'un document à remplir |
| 26/08/2026 | Référence = feuilles « Gwen à 80% » | Le congé parental de Gwendoline est prolongé |
| 26/08/2026 | Reconduction du cycle plutôt que génération automatique | Divise par dix la complexité : pas de solveur à écrire |
| 26/08/2026 | Tout en ligne, hébergeur français | L'équipe doit consulter depuis chez elle ; données RH en France |
| 26/08/2026 | Arrêts de travail hors application | Éviter d'héberger des données de santé |
| 26/08/2026 | Nom « PLANNING TEAM », charte tirée du logo | Demande de l'utilisateur |
| 26/08/2026 | Chloé : 18 h au planning, 35h/S au cabinet — on garde en l'état | Les 35 h incluent l'école ; ce n'est pas une incohérence à corriger |
| 26/08/2026 | L'export fiche navette **remplit** le classeur du cabinet, section par section repérée par son libellé | Les numéros de ligne bougent chaque mois ; il faut rester au format exact de Betty |
| 26/08/2026 | Socle technique : **même trio que les autres outils** (`.cmd` + `serveur.py` + page HTML), plus **SQLite** | Aucun outil nouveau à apprendre ; la base tient dans un fichier ; la même application se met en ligne au lot 4 sans réécriture |
| 26/08/2026 | Développement en **5 lots**, les lots 1 à 3 en local, mise en ligne au lot 4 | Chaque lot sert seul ; repousse l'hébergement et le RGPD au moment où ils seront concrets |
| 26/08/2026 | **Dropbox devient le dossier principal** (`Dropbox\JEROME PERSO\IA`) | Décision de l'utilisateur — ⚠️ impose de désactiver la tâche `robocopy /MIR` du poste pharmacie |
| 26/08/2026 | Horaires corrigés : **fermeture 12h30–14h**, samedi jusqu'à 18h30 | Établi par le calcul, personne n'est planifié sur ces créneaux |
| 26/08/2026 | La règle des 3 personnes porte sur le **comptoir**, rayonniste déduite | Lecture littérale de la règle ; ne crée aucune alerte nouvelle sur le cycle |
| 26/08/2026 | Couleurs reprises de la **police** du classeur Excel, une par personne | C'est là qu'était le code couleur ; Manon et Lilou partagent une teinte hors classeur |
| 26/08/2026 | Les jours d'**AJPP d'Élodie** étaient déjà encodés en fond bleuté dans le classeur | 17 h en S1, 8,5 h en S2 — correspond exactement aux notes « sans AJPP » |
| 26/08/2026 | AJPP marquée **par journée**, jamais par créneau | Le cabinet compte l'AJPP en jours |
| 26/08/2026 | Retouches du planning **par date**, sans toucher au cycle (`creneau_jour`) | Modifier une semaine ne doit pas modifier toutes les semaines de même parité |
| 26/08/2026 | Créneaux retirés **et** ajoutés à la main affichés **en hachuré** | Sinon on ne voit plus ce qu'on a changé |
| 26/08/2026 | Les écarts au cycle alimentent la **récupération** | Heures en moins = dues, en plus = à récupérer |
| 26/08/2026 | Un solde de CP n'est **jamais écrasé** : on enregistre l'écart et son motif | C'est ce qui manquait lors de l'oubli de 2025 |
| 26/08/2026 | Un **échange** passe par le collègue avant de remonter à la validation | Trois étapes, comme dans la réalité |
| 26/08/2026 | Le planning **démarre à la semaine 36 de 2026** (lundi 31/08) | C'est là que le classeur bascule sur le nouveau cycle ; rien avant n'a de sens |
| 26/08/2026 | Jérôme a un **compte à accès total, hors planning** | Il n'a ni contrat ni créneaux, mais doit tout piloter |
| 26/08/2026 | Les salariés **choisissent leur mot de passe** (lien d'invitation) | L'employeur ne doit pas connaître les mots de passe de son équipe |
| 26/08/2026 | Un compte « équipe » voit les **horaires** des collègues, rien d'autre | Utile pour les échanges, sans exposer heures ni motifs d'absence |
| 26/08/2026 | Sauvegarde quotidienne **relue après écriture** | Une sauvegarde qu'on n'a pas relue n'est pas une sauvegarde |
| 26/08/2026 | **Aucune donnée de santé dans l'outil** | Évite un hébergement certifié HDS — projet lourd et coûteux |

## 📓 Journal des séances

### 21/08/2026
- Création du projet, analyse des plannings Excel existants (2021 et 2025), lecture des
  échanges Gmail avec le cabinet FRS, rédaction des 33 questions de cadrage.

### 26/08/2026
- **Cadrage complet** : les 33 questions posées une par une, réponses consignées dans
  `docs\Reponses-cadrage.md`.
- Analyse du classeur `Emploi du temps BASE SEPTEMBRE 2026` : horaires réels, effectif,
  feuille « Souhaits et désidérata », calcul des présences réelles par personne et par jour.
- Découverte que le contrat est une **moyenne sur 2 semaines** — vérifiée sur les deux feuilles.
- Identification des **journées inégales** (Sariaka 3,5 h le lundi, Thomas 5,5 h, etc.) et de
  leur effet sur le décompte des CP.
- Retrouvé le mail de Marie-Cécile du 19/06/2025 sur le décompte des CP, transféré à Betty
  et **resté sans réponse**.
- Nom de l'outil et charte graphique fixés à partir du logo de la pharmacie.
- **Analyse complète de `fiche navette 2026.xlsx`** → `docs\Analyse-fiche-navette.md` :
  structure, sections, code couleur rouge/jaune, découpage en semaines ISO.
  Deux découvertes : la **règle d'ancienneté est déterministe** (un palier tous les 3 ans,
  plafonné à 15 ans — donc calculable par l'outil), et le **décompte des CP exclut les jours
  fériés** (vérifié sur le samedi 15 août 2026).
  Gwendoline et Manon changent de palier d'ancienneté **en septembre 2026**.
- Brouillon Gmail préparé pour Betty (SILAE + matricules + décompte des CP), non envoyé.
- **Conception rédigée** → `docs\Conception.md` : modèle de données (7 objets), règles de
  calcul, écrans côté gestion et côté équipe, découpage en 5 lots, chemin d'hébergement.
- Socle technique aligné sur les outils existants après lecture de `virements\serveur.py` et
  `rapprochement-factures` : `.cmd` + `serveur.py` + page HTML, plus SQLite.
- **Dropbox devient le dossier principal** ; les fichiers du projet y ont été recopiés.
- **Correction des horaires** : ce n'est pas une journée continue. Le calcul de la présence
  réelle montre que **personne n'est planifié entre 12h30 et 14h** sur les 12 combinaisons
  jour × semaine, ni le samedi après 18h30 → **fermeture le midi**. La première lecture
  s'était fondée sur l'amplitude de la grille (8h30–19h30) au lieu des présences.
- **Lot 1 construit et testé** : import du classeur, grille éditable, compteurs, contrôles.
  Vérifié par API : retirer une demi-heure à Aurore fait passer sa moyenne de 32,00 à 31,75 ;
  la remettre restaure exactement 32,00. Retirer deux personnes le samedi à 17h30 déclenche
  bien l'alerte de sous-effectif.

## 🔎 Ce que dit `Planning 2026.xlsx` (analysé le 26/08/2026)

Le classeur de l'année en cours a été déposé dans `docs\`. Il **confirme l'ancrage du
cycle** : ses onglets sont nommés `36(2)`, `37(1)`, `38(2)`… `52(2)`, `1(1) 2027` — donc
**semaines ISO paires = S2, impaires = S1**, exactement ce que calcule l'outil. La bascule
vers le nouveau planning a lieu en **semaine 36** (du 31/08 au 05/09, « NOUVEAU PLANNING ») ;
les semaines 1 à 35 sont encore sur l'ancienne rotation C1/D2/A1/B2.

Anomalies relevées à partir de septembre :

1. **Échange Sariaka ↔ Marie-Cécile, 1 h d'écart.** Sariaka prend le samedi 05/09 de MC
   (+8,5 h) et rend le mardi 15/09 (−9,5 h) ; MC n'est créditée que de +8,5 h.
   *Réponse de Jérôme : normal, Marie-Cécile ne fait pas les mêmes horaires ce mardi-là.*
2. **L'AJPP d'Élodie ne tombe pas où le cycle la prévoit.** Le classeur de base la place
   mardi et jeudi en S1, jeudi en S2 ; la semaine 37 (une S1) note « Lu 07 => AJPP ».
   À éclaircir : l'AJPP a bougé, ou le classeur de base est en retard.
3. **Le cycle n'a jamais tourné tel quel.** Stéphanie est en arrêt dès la mise en place
   (opération du genou : 2 j en S36, 5 j en S37).
4. **La formation SYNAPS du lundi 28/09** mobilise Thomas, Aurore et Stéphanie en même
   temps — vérifié par simulation : **aucune alerte**, le lundi est généreusement doté.
5. La semaine 36 est notée « Vacances scolaires » alors que la rentrée est le mardi
   01/09/2026 : seul le lundi 31/08 l'est.
6. Semaine 39 : « Aurore **Flo** en déplacement » — ce prénom n'apparaît nulle part ailleurs.
7. Les annotations notent « HS » aussi bien pour les heures en plus qu'en moins : à la
   lecture, impossible de savoir ce qui a été payé et ce qui a été récupéré.

## 📎 Ressources

- **`docs\Reponses-cadrage.md`** — toutes les décisions du cadrage (document de référence)
- **`docs\Analyse-fiche-navette.md`** — structure et variables attendues par le cabinet
- **`docs\Conception.md`** — modèle de données, règles de calcul, écrans, lots, hébergement
- `docs\Questions-cadrage.md` — le questionnaire d'origine
- `docs\charte\CHARTE.md` + `logo-pharmacie-morance.jpg` — identité visuelle
- `docs\Emploi du temps BASE SEPTEMBRE 2026 planning sur 2 semaines.xlsx` — **le classeur de
  référence** (feuilles « Gwen à 80% »)
- `docs\fiche navette 2026.xlsx`, `Planning heures supplémentaires 2026.xlsx`,
  `Planning vacances-Récap congés.xlsx`, `Tickets restaurants Année 2026.xlsx` — à analyser
- Contacts cabinet FRS : Betty Tchicaya (paie, `betty.tchicaya@cabinet-frs.fr`),
  Marie Levionnois (associée)
- Groupe WhatsApp « emploi du temps » de l'équipe — conservé pour les urgences
- Projet voisin : [[virements]]
