# Conception — PLANNING TEAM

**Grande Pharmacie de Morancé** · rédigé le 26/08/2026
Base : `Reponses-cadrage.md` (33 questions tranchées) et `Analyse-fiche-navette.md`.

---

## 1. Le principe directeur

Le cadrage a fait tomber la partie la plus coûteuse du projet : **il n'y a pas de planning à
inventer chaque semaine**. Il y a un **cycle de référence de 2 semaines**, construit une fois à
partir des souhaits de chacun, qui se **reconduit** indéfiniment. Le travail quotidien consiste
à poser des **exceptions** par-dessus : une absence, un remplacement, un férié.

Tout le reste — heures, congés, tickets restaurant, fiche navette — se **calcule** à partir de
ces deux objets. L'outil ne décide rien : il déroule, il calcule, et il alerte quand une règle
est enfreinte.

```
CYCLE DE RÉFÉRENCE (S1 / S2)          EXCEPTIONS                 CALENDRIER
 qui travaille quand, en temps normal   absences, remplacements,   fériés, fermetures,
 change deux fois par an                horaires modifiés          vacances, gardes
              │                              │                          │
              └──────────────┬───────────────┴──────────────────────────┘
                             ▼
                  PLANNING EFFECTIF d'une semaine ISO
                             │
     ┌───────────────────────┼────────────────────────┬──────────────────┐
     ▼                       ▼                        ▼                  ▼
  CONTRÔLES              COMPTEURS                 EXPORTS          VUE ÉQUIPE
  1 pharmacien           heures / cycle            PDF équipe        mon planning
  3 au comptoir          CP restants               PDF cabinet       qui est là
  (sauf 19h–19h30)       écart cumulé, samedis     fiche navette     mes demandes
                                                   Excel ancien
```

## 2. Modèle de données

Sept objets suffisent.

### `salarie`
`initiale` (A, N, Sa, MC, V, E, G, St, T, C, P, M, L) · nom · prénom · `fonction`
(pharmacien / préparateur / rayonniste / apprenti / étudiant) · `contrat_h_moyen` (moyenne
hebdo sur le cycle) · `date_entree` · `matricule_paie` · adresse · téléphone ·
`actif_du` / `actif_au` · `paye_a_l_heure` (vrai pour Manon et Lilou).

> **L'initiale est la clé d'affichage**, pas un identifiant : le classeur distingue déjà
> **Sa** (Sariaka) de **St** (Stéphanie), et **MC** (Marie-Cécile) de **M** (Manon). À garder.

### `creneau_type` — le cycle de référence
`salarie` · `semaine_cycle` (1 ou 2) · `jour` (lundi → samedi) · `heure_debut` · `heure_fin`.

Une ligne par plage continue. Exemple : Stéphanie, semaine 1, mercredi, deux lignes —
8h30→12h et 14h30→19h30 (sa pause de 12h à 14h30).

### `calendrier_semaine`
`annee` · `numero_iso` · `semaine_cycle` (1 ou 2).
C'est ce qui ancre le cycle dans le temps réel.
**Confirmé le 26/08/2026 : S1 = semaines ISO impaires**, S2 = semaines paires — cohérent avec
le désidérata de Gwendoline (« travailler les samedis des semaines impaires »).

### Horaires d'ouverture

| | Matin | Après-midi |
|---|---|---|
| **Lundi → vendredi** | 8h30 → 12h30 | 14h00 → 19h30 |
| **Samedi** | 8h30 → 12h30 | 14h00 → 18h30 |

**Fermeture de 12h30 à 14h00**, tous les jours. Établi par le calcul : personne n'est planifié
sur ces créneaux dans aucune des 12 combinaisons jour × semaine du cycle.
La grille de l'écran ne doit donc afficher **que les créneaux d'ouverture** — 8 le matin,
11 l'après-midi (9 le samedi) — et non l'amplitude 8h30–19h30 du classeur.

### `exception`
`date` · `salarie` · `type` (absent / horaire modifié / renfort) · `heure_debut` · `heure_fin`
· `motif` · `commentaire`.
Une exception écrase le créneau type pour ce jour-là.

### `absence`
`salarie` · `date_debut` · `date_fin` · `type` (CP, maladie, maternité/paternité, congé
parental, AJPP, événement familial, sans solde, récupération) · `salaire_maintenu` (o/n) ·
`statut` (demandée / validée / refusée) · `validee_par` (Jérôme ou Aurore) · `demandee_le`.

Une absence validée génère automatiquement les `exception` correspondantes.

### `jour_special`
`date` · `type` (férié / fermeture exceptionnelle / vacances scolaires / garde) ·
`heure_ouverture` · `heure_fermeture` · `libelle`.
Sert à la fois à l'affichage et au décompte des CP (les fériés ne se décomptent pas).

### `compteur` — les soldes
`salarie` · `type` (CP, récupération) · `solde_initial` · `date_initiale` · mouvements.
Le solde initial est saisi à la main en septembre 2026, d'après le dernier bulletin.

---

## 3. Les règles de calcul

Toutes vérifiées sur les données réelles pendant le cadrage.

| Règle | Formule |
|---|---|
| **Heures d'une semaine** | Somme des créneaux effectifs (cycle + exceptions), en demi-heures |
| **Conformité au contrat** | `(heures S1 + heures S2) / 2` comparé à `contrat_h_moyen`. **Jamais semaine par semaine** |
| **Décompte CP** | Jours ouvrables **lundi → samedi**, **hors jours fériés**. Vérifié : « du 10 au 15/08 » = 5 jours, le samedi 15 août étant férié |
| **Pose des CP** | 4 semaines complètes obligatoires ; seule la 5ᵉ est morcelable. Pas de demi-journée |
| **Congé sur journée courte** | Compte **1 jour ouvrable** quelle que soit la durée, **mais l'outil affiche les heures réelles** en regard (3,5 h pour Sariaka le lundi, 5,5 h pour Thomas) |
| **Tickets restaurant** | 1 par jour travaillé **comportant une pause déjeuner** ; rien pour les demi-journées |
| **Ancienneté** | Un palier **tous les 3 ans**, **plafonné à 15 ans**. Entièrement calculable depuis `date_entree` |
| **Heures au-delà du contrat** | Calculées par cycle, puis **arbitrées par Jérôme** : payées (→ fiche navette) ou récupérées (→ compteur) |

### Les deux contrôles bloquants

1. **Au moins un pharmacien présent** à chaque demi-heure d'ouverture
   (Aurore, Nicolas, Sariaka ou Marie-Cécile).
2. **Au moins 3 personnes au comptoir**, sauf sur la **dernière demi-heure (19h–19h30)**.

Ils se recalculent à chaque modification et colorent le créneau fautif dans la grille.

---

## 4. Les écrans

### Côté gestion — Jérôme et Aurore

**1. La grille de la quinzaine** *(l'écran principal, 90 % de l'usage)*
6 jours × 22 demi-heures, une colonne par personne. Une teinte par personne, dérivée du
turquoise de la charte. Les créneaux issus du cycle sont pleins, les exceptions hachurées.
En bas de chaque demi-heure : le nombre de présents et le nombre de pharmaciens — en rouge si
la règle n'est pas tenue.

**2. Le panneau de compteurs** *(toujours visible, à droite)*
Par personne : heures S1 / S2 / moyenne / écart au contrat · CP restants · écart cumulé
depuis janvier · nombre de samedis travaillés.

**3. Le cycle de référence** *(rare — deux fois par an)*
Le même écran que la grille, mais en mode « je modifie le modèle ». Les souhaits et désidérata
de chacun s'affichent en marge pendant l'édition.

**4. Demandes et absences**
La file des demandes de l'équipe à valider, et la saisie directe des absences. Une demande
qui casserait un contrôle est signalée **avant** validation.

**5. La paie du mois**
Un bouton, trois sorties : la **fiche navette** remplie, le **PDF du planning** des semaines
concernées, le **brouillon de mail** à Betty avec les points à signaler pré-rédigés.

**6. Fiches salariés** et **7. Calendrier** (fériés, fermetures, vacances scolaires, gardes).

### Côté équipe — sur téléphone

- **Mon planning** : la quinzaine en cours et la suivante, une colonne par jour, pas de scroll
  horizontal. Un **badge « modifié »** si quelque chose a bougé depuis la dernière visite.
- **Qui est là** : la présence des collègues, sans leurs heures ni leurs congés.
- **Mes demandes** : poser un congé, signaler une absence, proposer un échange de créneau.

---

## 5. Découpage en lots

L'ordre est choisi pour que **chaque lot serve tout seul**, même si le suivant n'arrive jamais.

| Lot | Contenu | Ce que ça apporte |
|---|---|---|
| **1. Le noyau** | Cycle de référence + grille + compteurs + les deux contrôles | Remplace déjà l'Excel pour construire un planning |
| **2. Absences et congés** | Absences, soldes de CP, compteur de récupération | Le point qui a coûté cher en 2025 |
| **3. Exports** | PDF équipe, PDF cabinet, fiche navette, Excel ancien format | Supprime la ressaisie mensuelle |
| **4. Mise en ligne** | Hébergement, comptes, vue équipe en lecture | L'équipe consulte depuis chez elle |
| **5. Demandes de l'équipe** | Congés, absences, échanges de créneau | Remplace le circuit oral |

**Les lots 1 à 3 se développent et s'utilisent en local**, comme les autres outils. On ne met
en ligne qu'au lot 4, quand l'outil a déjà fait ses preuves — ça repousse la question de
l'hébergement et du RGPD au moment où elle sera concrète, plutôt que de la traiter à vide.

⚠️ **Le lot 3 dépend de la réponse de Betty sur SILAE.** Si le cabinet impose un portail ou un
format de fichier en octobre, l'export « fiche navette » change de nature. Les lots 1 et 2 n'en
dépendent pas — on peut commencer sans attendre.

---

## 6. Socle technique

**Décision : on reprend exactement le socle de tes outils existants.** J'ai regardé
`virements` et `rapprochement-factures` : tous deux sont bâtis sur le même trio.

```
Lancer-XXX.cmd  →  serveur.py  →  XXX.html
  raccourci        mini-serveur    l'application
  Bureau           Python local    (une seule page)
                        │
                    travail\        logique métier en Python
```

PLANNING TEAM suit le même schéma, avec **une seule différence** : là où tes autres outils ne
font que servir des fichiers, celui-ci doit **retenir** ce qu'on lui donne. On ajoute donc :

- **SQLite** pour la base — inclus dans Python, aucune dépendance à installer. La base est
  **un fichier unique** (`travail\planning.db`) : sauvegarde par simple copie, et il suffit de
  le déplacer pour changer de machine ;
- **un vrai petit API** dans `serveur.py` (lire, écrire, calculer) au lieu du seul service de
  fichiers.

Le reste ne change pas : une page HTML, la charte du logo, un raccourci Bureau. **Et surtout,
la même application se met en ligne au lot 4 sans être réécrite** — c'est la raison principale
de ce choix.

> ✅ **Python 3.13.15 installé le 26/08/2026** sur le PC « JEROME », via `winget`, en portée
> utilisateur : `C:\Users\perso\AppData\Local\Programs\Python\Python313\`.
> `sqlite3` 3.50.4 est inclus — aucune dépendance supplémentaire à installer pour la base.

## 7. Hébergement — le chemin, étape par étape

*Sujet du lot 4. Rien à faire tout de suite, mais autant savoir où on va.*

### Ce qu'il faut réunir

| Élément | Recommandation | Coût indicatif |
|---|---|---|
| **Nom de domaine** | Un sous-domaine, ex. `planning.pharmaciedemorance.fr` | ~10 €/an si le domaine n'existe pas déjà |
| **Serveur** | Un petit VPS chez **Scaleway**, **OVH** ou **Infomaniak** — données en France | 5 à 10 €/mois |
| **Certificat HTTPS** | Gratuit (Let's Encrypt), automatique | 0 € |
| **Sauvegardes** | Snapshot quotidien du serveur + export de la base vers Dropbox | ~1 €/mois |

**Préférence : Infomaniak** (suisse, RGPD strict, support en français, interface simple) ou
**Scaleway** (français, moins cher, plus technique). Les deux conviennent ; le choix se fera au
lot 4 selon ton confort.

### Les étapes, dans l'ordre

1. Réserver le domaine ou le sous-domaine.
2. Créer le serveur, le mettre à jour, fermer tout sauf HTTPS.
3. Installer l'application et la base, activer HTTPS.
4. Créer **un compte par personne** — identifiant + mot de passe, pas de compte partagé.
5. Mettre en place la sauvegarde quotidienne **et la tester en restaurant une fois**.
6. Basculer : l'équipe reçoit le lien, le groupe WhatsApp reste pour les urgences.

### Ce que le RGPD demande, concrètement

Ce ne sont pas des formalités abstraites : il y a des données RH de 13 personnes en jeu.

- **Un registre des traitements** — une page qui dit quelles données, pourquoi, combien de
  temps, qui y accède. C'est le document qu'on présente en cas de contrôle.
- **Informer l'équipe** par écrit avant la mise en ligne : ce qui est enregistré, qui le voit,
  comment demander une correction ou une suppression.
- **Une durée de conservation** : par exemple 3 ans glissants pour les plannings, 5 ans pour ce
  qui touche à la paie.
- **Cloisonner les accès** : chaque salarié ne voit que son planning et la présence des
  collègues — jamais les heures contrat ni les congés des autres.
- **Aucun arrêt de travail en ligne.** Décision déjà prise : l'application ne connaît que
  « absent, arrêt maladie, du X au Y ». Le PDF du médecin reste sur le poste et part au cabinet
  depuis là. C'est ce qui évite d'héberger des données de santé, et ça change tout sur le plan
  réglementaire.

Je te guiderai pas à pas le moment venu, y compris pour rédiger le registre et la note à
l'équipe.

---

## 8. Ce qu'il reste à décider avant de coder

1. **Installer Python 3** si le développement se fait sur ce PC (absent aujourd'hui).
2. **L'ancrage du cycle** : confirmer que **S1 correspond aux semaines ISO impaires**, pour
   respecter les samedis de Gwendoline.
3. **Les étudiantes** : Manon et Lilou n'ont pas d'heures contractuelles. Sont-elles placées
   dans le cycle de référence, ou uniquement en exception, semaine par semaine ?
4. **Élodie et l'AJPP** : les notes du classeur diffèrent entre S1 (18 h hors AJPP) et S2
   (26,5 h hors AJPP). Comment l'AJPP se traduit-elle dans le planning ?
5. **Réponse de Betty sur SILAE**, avant le lot 3.
