mirror of
https://github.com/siop-spelev/siop2.git
synced 2026-08-08 12:41:54 +00:00
feat(r2.3): écrans web exploitation — OT, demandes, préventif, compteurs, urgence
- liste OT (filtres, strie rouge, « immédiat ») ; fiche OT : transitions pilotées par allowedTransitions, clôture grisée avec la garde expliquée, bilan codé (6 selects sur référentiels), checklist Fait→N-A→à faire, activité + commentaires, assignation, annulation motivée - nouvel OT : interrupteur « personne bloquée » qui force la priorité - demandes : table + panneau d'approbation (priorité, assignation, approuver → fiche OT), rejet en modale à motif obligatoire, signalement interne ; statut « Résolue » dérivé de l'OT lié - préventif : tuiles réelles, générer + résumé (« regénérer ne double rien »), gabarits administrables ; compteurs : saisie + historique - tableau de bord réel : bandeau urgence cliquable, KPIs, OT par statut, interventions récentes ; accueil dédié aux rôles sans exploitation - urgence traversante : chip topbar pulsante (60 s), badges de nav - GET /assets/options (auth seule) : le Demandeur peut désigner l'appareil qu'il signale — trou débusqué par l'e2e (49 opérations au contrat) - génération préventive durcie : collision de référence RETENTÉE (plus de saut silencieux), P2003 toléré ; 3 runs Jest complets consécutifs verts - 9 tests Playwright (recette R2 officielle rejouée intégralement), 50 tests API (94,6 % / 78,9 %) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -12,6 +12,7 @@ import {
|
||||
AssetComponentCreateSchema,
|
||||
AssetComponentSchema,
|
||||
AssetDetailSchema,
|
||||
AssetOptionsResponseSchema,
|
||||
AssetsResponseSchema,
|
||||
AssetUpdateSchema,
|
||||
CategoriesResponseSchema,
|
||||
@@ -244,6 +245,20 @@ export const API_CONTRACT: ApiOperation[] = [
|
||||
200: { description: 'Liste', name: 'AssetsResponse', schema: AssetsResponseSchema },
|
||||
},
|
||||
},
|
||||
{
|
||||
operationId: 'listAssetOptions',
|
||||
method: 'get',
|
||||
path: '/assets/options',
|
||||
summary: 'Options d’appareils pour le signalement (tout rôle authentifié)',
|
||||
tags: ['assets'],
|
||||
responses: {
|
||||
200: {
|
||||
description: 'Options',
|
||||
name: 'AssetOptionsResponse',
|
||||
schema: AssetOptionsResponseSchema,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
operationId: 'getAsset',
|
||||
method: 'get',
|
||||
|
||||
@@ -97,6 +97,18 @@ export type AssetDto = z.infer<typeof AssetSchema>;
|
||||
export const AssetsResponseSchema = z.object({ assets: z.array(AssetSchema) });
|
||||
export type AssetsResponse = z.infer<typeof AssetsResponseSchema>;
|
||||
|
||||
/** Option minimale pour désigner un appareil (signalement) — accessible à
|
||||
* tout rôle authentifié : les références sont affichées en cabine. */
|
||||
export const AssetOptionSchema = z.object({
|
||||
id: z.uuid(),
|
||||
reference: z.string(),
|
||||
siteName: z.string(),
|
||||
});
|
||||
export const AssetOptionsResponseSchema = z.object({
|
||||
options: z.array(AssetOptionSchema),
|
||||
});
|
||||
export type AssetOptionsResponse = z.infer<typeof AssetOptionsResponseSchema>;
|
||||
|
||||
export const AssetDetailSchema = AssetSchema.extend({
|
||||
components: z.array(AssetComponentSchema),
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user