mirror of
https://github.com/siop-spelev/siop2.git
synced 2026-08-08 12:41:54 +00:00
c9168ece1681eaf0876b9fe3be3ae1fd899775ef
Trouvé en recette : GET /assets/options n'avait aucun filtre — tout Demandeur voyait le parc complet dans le sélecteur d'équipement de "Nouvelle demande", sur le web ET le mobile (même endpoint partagé). Risque réel : signaler accidentellement une panne sur un ascenseur qu'on ne gère pas. Corrigé à la racine, sur les deux plateformes à la fois : - Relation many-to-many User↔Location (assignedSites/assignedUsers, migration r6_demandeur_sites, même style que Team.members) — vide = aucune restriction, comportement historique inchangé pour tous les rôles sauf un Demandeur affecté à un site. - AssetsService.allowedLocationIds(user) : sites + zones filles autorisés, ou null si aucune restriction — réutilisée par options() ET par RequestsService.create (défense en profondeur : un assetId soumis directement hors périmètre est rejeté, 400). - UsersService : assertTopLevelSites (un Demandeur est affecté à un site, jamais une zone) ; invite()/update() branchent locationIds (remplace l'affectation, comme teamIds). - Web (personnes.tsx) : ModaleInvitation affiche les sites à cocher pour un rôle Demandeur ; colonne "Sites" éditable via une modale dédiée. - Mobile (formulaire-demande.tsx) : bouton "Scanner l'étiquette" en raccourci — résout uniquement contre les options déjà chargées (déjà filtrées), jamais de repli sur le parc complet qui annulerait la restriction. Aucun changement à useAssetOptions() : le filtrage serveur profite automatiquement au formulaire mobile. - Seed : Karim Doukkali (démo) rattaché à Tour Atlas. Bug trouvé en vérification avant tout commit : create() comparait allowed.includes(dto.assetId), mais allowed est une liste d'ids de sites/zones, pas d'ids d'appareils — aurait rejeté à tort tout signalement d'un Demandeur affecté, y compris dans son propre périmètre. Corrigé (comparaison sur asset.locationId) ; méthode renommée allowedAssetIds → allowedLocationIds pour que le nom dise ce qu'elle retourne. exploitation.e2e-spec.ts mis à jour (A1/C1 → A2/B1, dans le site de Karim — sinon rejetés par la nouvelle règle, comportement voulu). 79/80 tests API verts, le seul échec (documents-analytics, monthCost) est le flake calendaire déjà identifié cette session, sans rapport. Typecheck/tests/lint verts sur les 4 paquets. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
SIOP V2 — GMAO pour la maintenance d'ascenseurs
SIOP (Système Intégré d'Opérations de maintenance Préventive) est une GMAO complète dédiée à la maintenance d'ascenseurs, inspirée fonctionnellement d'Atlas CMMS et adaptée au métier (carnet d'intervention, périodicités réglementaires, PV signés, urgence « personne bloquée »), avec une couche IA différenciante.
Ce dépôt poursuit deux objectifs jumeaux :
- Le produit — une application web + mobile + IA complètement fonctionnelle, déployée en production (Dokploy).
- Le playbook — la documentation pédagogique de toutes les phases du cycle de vie logiciel (cadrage → design → architecture → développement → tests → production → formation), réutilisable comme support de cours et comme méthode d'entreprise.
V2 : refondation design-first du projet siop (v1, gelée — elle sert de référence de lecture). 100 % nouveau code.
Le playbook
| Phase | Dossier | Contenu |
|---|---|---|
| Vision | docs/00-vision | Charte projet, personas, benchmark Atlas |
| Cadrage | docs/01-cadrage | Releases, user-story map, exigences, risques |
| Design | docs/02-design | Charte graphique, design tokens, maquettes HD |
| Architecture | docs/03-architecture | ADRs, C4, modèle de données, contrat d'API |
| Développement | docs/04-developpement | Conventions, déroulé d'un sprint |
| Tests | docs/05-tests | Stratégie, plans, recettes par release |
| Production | docs/06-production | Runbook Dokploy, sauvegardes, sécurité |
| Formation | docs/07-formation | Manuels, supports, exercices étudiants |
Releases
R0 Fondations → R1 Référentiel → R2 Exploitation → R3 Gestion → R4 Mobile → R5 IA.
Règle : une release n'ouvre pas tant que la précédente n'est pas recettée et déployée.
Démarrage (à partir de R0)
nvm use && pnpm install
pnpm infra:up # PostgreSQL + Redis + MinIO (Docker)
pnpm dev
Projet mené par le Pr. Daaif (ENSET Mohammedia) avec ses étudiants, en partenariat avec SPELEV.
Description
SIOP V2 — GMAO ascenseurs (clone Atlas CMMS adapté) : produit complet + playbook pédagogique du cycle de vie logiciel
Languages
TypeScript
90.3%
Python
4.7%
CSS
4.1%
Dockerfile
0.5%
JavaScript
0.3%