diff --git a/CLAUDE.md b/CLAUDE.md index c3837bc..e241b4c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -44,5 +44,5 @@ pnpm + Turborepo. `apps/api` : NestJS, Prisma, PostgreSQL (pgvector + PostGIS), - ✅ **R1.1 — socle backend** : migration `r1_referentiel` (Category, Location site→zone + PostGIS générée, Asset, AssetComponent, Team, invitation User), 21 nouvelles opérations au contrat (26 total), 4 modules API + invitations/activation sous `@RequirePermission`, seed parc maquette (5 sites, 8 appareils, organes, 2 équipes), 36 tests (96 %/85 %), CI sur `postgis/postgis:18-3.6`. - ✅ **R1.2 — écrans web du référentiel** : 7 écrans fidèles à maquette-r1.html (Sites + carte Leaflet/OSM, fiche site, ascenseurs, fiche appareil + QR réel, création, étiquette A6 imprimable, personnes & équipes avec lien d'activation à copier, catégories) + page /activation ; navigation et actions pilotées par la matrice (`usePermissions`) ; recette R1 rejouée en e2e Playwright (dont activation d'un invité) ; alias Vite `@siop/shared` → source TS (leçon CJS/workspace). - 🏁 **R1 CLOSE (16/07/2026, tag `release/r1`)** : recettée par le référent, déployée et vérifiée en ligne (migration + seed au boot, 5 sites / 8 appareils sur l'instance). -- 🔄 **R2 Exploitation — reprise ici, design d'abord** : maquettes R0 déjà validées pour tableau de bord / liste OT / fiche OT (bilan codé) / portail demandeur ; **à maquetter avant tout code : préventif** (gabarits à périodicité, grille du mois, checklist) et écrans secondaires (création OT/demande). Ensuite : modèle R2 (WorkOrder machine à états, Request 1-1, InterventionReport bilan codé, TaskTemplate/PreventivePlan/ChecklistItem, Meter) → API → web → mobile-ready. +- 🔄 **R2 Exploitation — ouverte, design d'abord** : `maquette-r2.html` (5 écrans : demandes/approbation, nouvel OT, préventif gabarits+génération, OT préventif checklist, compteurs) — **⛔ en attente de validation du référent avant tout code R2** (4 décisions soumises, dont la sémantique des statuts de demande). Écrans cœur déjà validés en R0. Ensuite : modèle R2 (WorkOrder machine à états, Request 1-1, InterventionReport bilan codé + ReferenceValue, TaskTemplate/ChecklistItem, Meter/MeterReading) → contrat → API (garde de clôture, génération idempotente BullMQ) → web → recette (parcours demande gardien → OT → bilan → clôture ; grille de juillet). - Détail quotidien : `docs/journal/journal.md`. Dépôt : `siop-spelev/siop2` (privé), jalons R0→R5. diff --git a/docs/02-design/maquettes/maquette-r2.html b/docs/02-design/maquettes/maquette-r2.html new file mode 100644 index 0000000..ea73173 --- /dev/null +++ b/docs/02-design/maquettes/maquette-r2.html @@ -0,0 +1,755 @@ + + + + + +SIOP V2 — Maquettes HD · R2 Exploitation + + + + + + + + +
+ SIOP V2 · Maquettes R2 — Exploitation + +
+
+ + +

Intention : la file d'attente de Salma. Une demande approuvée devient un OT (lien 1-1, jamais de doublon) ; un rejet exige un motif — le demandeur le lit sur son portail, sans jargon. « Personne bloquée » saute en tête, partout.

+
+
+
+
+
Rechercher…
+ 1 personne bloquée +
DÉMOSI +
Salma Idrissi
Dispatcher ▾
+
+
+
+

Demandes

3 à traiter · 12 ce mois +
+
+
+ + + + + + + + + +
SignalementÉquipement · SiteParStatut
DEM-2026-0112Personne bloquée en cabine !Asc. B2Tour AtlasKarim (QR)il y a 4 minUrgence
DEM-2026-0111Porte du 3ᵉ ne se ferme plusAsc. A1Résidence Al ManarKarim (QR)il y a 2 hReçue
DEM-2026-0110Voyant étage éteintAsc. C1Anfa PlaceH. Alami (QR)hierReçue
DEM-2026-0107Bruit anormal en gaineAsc. A1Résidence Al ManarKarim (QR)hierOT-2026-0341
DEM-2026-0104Odeur de brûlé (fausse alerte)Asc. M1Tour AtlasKarim (QR)11 juil.Rejetée
DEM-2026-0093Voyant cabine éteintAsc. A1Résidence Al ManarKarim (QR)2 juil.Résolue
+
+

DEM-2026-0111 — approbation

+
+
Équipement
Ascenseur A1 — Résidence Al Manar
+
Signalé par
Karim Doukkali (gardien) · via QR cabine
+
Description
« La porte ne se ferme plus au 3ᵉ étage, il faut la retenir à la main. »
+
+
📷 photo-porte-3e.jpg (fournie par le gardien)
+
Haute
+
Ahmed Benali — équipe Mohammedia
+
+ + +
+

L'OT reprend titre, équipement, photo et description — la demande suit ensuite l'OT (Reçu → Intervention → Résolu côté portail).

+
+
+
+
+
+
+ + + +
+
+
+
+
Rechercher…
+
DÉMOSI +
Salma Idrissi
Dispatcher ▾
+
+
+
Ordres de travail / Nouvel OT
+

Nouvel ordre de travail

+
+
+
+
Dépannage
+
B2 — Tour Atlas
+
Haute
+
+
+
Ahmed Benali
+
+
+
Personne bloquée dans la cabine ?passe l'OT en urgence absolue (bandeau + tête de liste)
+
+
+ + +
+
+
+
+
+ + + +
+
+
+
+
Rechercher…
+
DÉMOYA +
Yasmine Alaoui
Administratrice ▾
+
+
+
+

Préventif

+
+
+
+
32 / 41grilles générées
+
25terminées
+
3en retard
+
2premiers contrôles
+
+
+ ✓ Dernière génération : 1ᵉʳ juillet, 06 h 00 (automatique) — 32 OT créés, 0 doublon. Regénérer maintenant ne créerait que les grilles des 9 appareils ajoutés depuis. +
+
+
+ + + + + + + + + +
Tâche du gabaritOrgane viséPériodicitéJuillet
Contrôle fermeture / verrouillage des portesPortes cabine / palièresTous les moisDue
Nettoyage cuvette et toit de cabineTous les moisDue
Contrôle niveau d'huile réducteurTreuil / machinerieTous les 3 moisDue
Vérification jeu des coulisseauxTous les 6 moisNon due
Essai du parachuteParachute12 mois · réglementaireDue
Contrôle câbles de traction (usure, tension)Treuil / machinerieTous les 6 moisNon due
+
+
+ Le gabarit s'applique à tout appareil sous contrat préventif. Un appareil sans historique reçoit + un OT « premier contrôle » : toutes les tâches, quelle que soit la périodicité. +
+
+
+
+
+ + + +
+
+
+
+
Rechercher…
+
DÉMOAB +
Ahmed Benali
Technicien ▾
+
+
+
Ordres de travail / OT-2026-0338
+
+

Grille du mois — juillet · Ascenseur A1

+ En cours +
+
+
+
+

Checklist du mois — 4 / 6 traitées

+
Contrôle fermeture / verrouillage des portesAhmed · 09 h 12
+
Nettoyage cuvette et toit de cabineAhmed · 09 h 40
+
N-AContrôle niveau d'huile réducteur (gearless — sans objet)Ahmed · 09 h 41
+
Essai du parachuteAhmed · 10 h 25
+
Contrôle boutons cabine & paliers
+
Vérification éclairage de secours
+

⚠ La clôture reste bloquée : chaque tâche doit être Fait ou N-A.

+
+
+
+

Intervention

+
+
OT-2026-0338 · Maintenance
+
Équipement
Ascenseur A1 — Otis Gen2
+
Généré le
1ᵉʳ juillet (grille mensuelle)
+
Échéance
31 juillet 2026
+
Assigné
Ahmed Benali
+
+
+
+

Bilan d'intervention

+

Requis aussi pour la grille (écran « fiche OT » validé en R0) — prérempli : Action réalisée = Visite d'entretien.

+
+
+
+
+
+
+
+ + + +
+
+
+
+
Rechercher…
+
DÉMOAB +
Ahmed Benali
Technicien ▾
+
+
+
Ascenseurs / Ascenseur A1 / Compteurs
+

Compteurs — Ascenseur A1

+
+
+

Heures de marche

+
+ h + +
+
    +
  • 12 411 h — relevé mensuel
    1ᵉʳ juillet · Ahmed (grille)
  • +
  • 12 322 h — relevé mensuel
    2 juin · Fatima-Zahra
  • +
  • 12 246 h — relevé mensuel
    3 mai · Ahmed
  • +
+
+
+

Démarrages

+
+ cycles + +
+
    +
  • 1 831 970
    1ᵉʳ juillet · Ahmed (grille)
  • +
  • 1 815 400
    2 juin · Fatima-Zahra
  • +
+
+
+
+ Un relevé inférieur au précédent est refusé (compteur croissant). Les seuils d'alerte + (préventif conditionnel) sont au backlog v2 — R2 stocke et trace. +
+
+
+
+
+ + + + diff --git a/docs/journal/journal.md b/docs/journal/journal.md index d935f4d..753e177 100644 --- a/docs/journal/journal.md +++ b/docs/journal/journal.md @@ -4,6 +4,24 @@ Trace chronologique des sessions (la plus récente en premier). Le **playbook** --- +## 2026-07-16 — Pr. Daaif (+ Claude) — R2 ouverte : maquettes des écrans manquants à valider + +**Actions** + +- **R2 « Exploitation » ouverte — design d'abord.** Les écrans cœur sont déjà validés depuis R0 (tableau de bord, liste OT, fiche OT avec bilan codé 6 champs et garde de clôture, portail demandeur) ; `maquette-r2.html` complète avec les **5 écrans manquants** : Demandes (file + panneau d'approbation : approuver → OT 1-1, rejeter avec motif requis), Nouvel OT (interrupteur « personne bloquée » explicite), Préventif (gabarits à périodicité — parachute marqué réglementaire — génération du mois **idempotente**, premiers contrôles), OT préventif (checklist Fait/N-A, clôture bloquée si tâche sans réponse), Compteurs (relevés croissants, historique). +- Rendu vérifié (5 écrans + thème sombre, zéro erreur). + +**Décisions (proposées à la validation)** + +- Statuts de DEMANDE distincts (Reçue / Approuvée→OT lié / Rejetée / Résolue) réutilisant la sémantique chromatique des statuts OT ; à trancher : est-ce une entorse à « réservés » de la charte ou une extension cohérente ? +- Un rejet de demande **exige un motif** (lisible côté portail, sans jargon). +- Génération mensuelle : automatique le 1ᵉʳ à 06 h + bouton manuel ; **regénérer ne crée que le manquant** ; appareil sans historique → OT « premier contrôle » (toutes les tâches). +- Relevé de compteur strictement croissant (refus sinon). + +**⛔ Bloquant** : validation des maquettes R2 par le référent avant toute ligne de code R2. + +--- + ## 2026-07-16 — Pr. Daaif (+ Claude) — 🏁 R1 CLOSE : recettée, déployée, taguée **Actions**