/** * This file was auto-generated by openapi-typescript. * Do not make direct changes to the file. */ export interface paths { "/auth/login": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Connexion par e-mail et mot de passe */ post: operations["login"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/auth/demo-accounts": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Comptes de démonstration (ADR-002 — jamais de secret) * @description ADR-002 : cette route est absente (404) quand DEMO_MODE n’est pas actif. */ get: operations["listDemoAccounts"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/auth/demo-login": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Connexion 1 clic sur un compte de démonstration (ADR-002) * @description ADR-002 : cette route est absente (404) quand DEMO_MODE n’est pas actif. */ post: operations["demoLogin"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/users/me": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Profil courant + matrice de permissions du rôle */ get: operations["getMe"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/auth/activate": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Activer un compte invité (lien 7 jours) — connecte directement */ post: operations["activateAccount"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/categories": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Référentiels administrables (catégories d’équipement, types d’organes) */ get: operations["listCategories"]; put?: never; /** Ajouter une catégorie */ post: operations["createCategory"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/categories/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; delete?: never; options?: never; head?: never; /** Renommer ou (dés)activer — jamais de suppression si utilisée */ patch: operations["updateCategory"]; trace?: never; }; "/locations": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Sites et zones (liste plate, le client construit l’arbre) */ get: operations["listLocations"]; put?: never; /** Créer un site (sans parent) ou une zone (profondeur max 2) */ post: operations["createLocation"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/locations/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; delete?: never; options?: never; head?: never; /** Modifier un emplacement */ patch: operations["updateLocation"]; trace?: never; }; "/assets": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Inventaire des appareils */ get: operations["listAssets"]; put?: never; /** Créer un appareil (avec ses organes) — le QR découle de la référence */ post: operations["createAsset"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/assets/options": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Options d’appareils pour le signalement (tout rôle authentifié) */ get: operations["listAssetOptions"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/assets/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Fiche appareil (identité + organes) */ get: operations["getAsset"]; put?: never; post?: never; delete?: never; options?: never; head?: never; /** Modifier un appareil (dont son statut d’équipement) */ patch: operations["updateAsset"]; trace?: never; }; "/assets/{id}/components": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Ajouter un organe (jamais d’emplacement propre) */ post: operations["addAssetComponent"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/assets/{id}/components/{componentId}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** Retirer un organe */ delete: operations["removeAssetComponent"]; options?: never; head?: never; patch?: never; trace?: never; }; "/teams": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Équipes et leurs membres */ get: operations["listTeams"]; put?: never; /** Créer une équipe */ post: operations["createTeam"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/teams/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; delete?: never; options?: never; head?: never; /** Modifier une équipe (nom, description, membres) */ patch: operations["updateTeam"]; trace?: never; }; "/users": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Personnes (statut dérivé : actif / invité / désactivé) */ get: operations["listUsers"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/roles": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Les 7 rôles (pour l’invitation) */ get: operations["listRoles"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/users/invitations": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Inviter — crée le compte inactif et émet le lien d’activation (7 j) */ post: operations["inviteUser"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/users/{id}/invitation": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Régénérer le lien d’activation d’un compte non activé */ post: operations["resendInvitation"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/users/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; delete?: never; options?: never; head?: never; /** Modifier une personne (rôle, équipes, activation du compte) */ patch: operations["updateUser"]; trace?: never; }; "/documents": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Bibliothèque (filtrable par appareil ou OT) */ get: operations["listDocuments"]; put?: never; /** Téléverser (PDF/JPG/PNG, 20 Mo max, rattachement appareil OU OT requis) */ post: operations["uploadDocument"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/documents/{id}/download": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Télécharger — streamé par l’API (MinIO jamais exposé) */ get: operations["downloadDocument"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/documents/{id}/corpus": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; delete?: never; options?: never; head?: never; /** Inclure/exclure du corpus IA (D3 — réversible, effectif à la prochaine réindexation) */ patch: operations["updateDocumentCorpus"]; trace?: never; }; "/documents/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** Supprimer (permission d’édition sur la cible) */ delete: operations["deleteDocument"]; options?: never; head?: never; patch?: never; trace?: never; }; "/analytics/summary": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Le tableau de la direction : coûts, pannes par organe (bilans), préventif, top équipements */ get: operations["getAnalyticsSummary"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/assistant/ask": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Assistant R5 — sourcé ou silencieux : extraits cités ou refus honnête (D2) */ post: operations["askAssistant"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/assistant/suggest-bilan": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Suggérer des codes de bilan depuis une description libre (D1 — l’humain valide) */ post: operations["suggestBilan"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/assistant/reindex": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Réindexer le corpus (bibliothèque PDF + bilans clôturés, anonymisés à l’ingestion — D4) */ post: operations["reindexAssistant"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/search": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Recherche globale (OT, ascenseurs, sites) — chaque famille filtrée par la matrice */ get: operations["globalSearch"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/partners": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Tiers (fournisseurs, syndics) — permission PURCHASE_ORDERS */ get: operations["listPartners"]; put?: never; /** Créer un tiers */ post: operations["createPartner"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/partners/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; delete?: never; options?: never; head?: never; /** Modifier / (dés)activer un tiers */ patch: operations["updatePartner"]; trace?: never; }; "/parts": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Stock de pièces — quantités DÉRIVÉES des mouvements */ get: operations["listParts"]; put?: never; /** Créer une pièce (référence P-#### générée) */ post: operations["createPart"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/parts/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Fiche pièce : les mouvements SONT le stock */ get: operations["getPart"]; put?: never; post?: never; delete?: never; options?: never; head?: never; /** Modifier une pièce (désignation, seuil, fournisseur…) */ patch: operations["updatePart"]; trace?: never; }; "/parts/{id}/movements": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Entrée manuelle (+) ou ajustement (± motif REQUIS) — jamais de saisie de stock */ post: operations["addStockMovement"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/purchase-orders": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Bons de commande */ get: operations["listPurchaseOrders"]; put?: never; /** Créer un BC (brouillon) */ post: operations["createPurchaseOrder"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/purchase-orders/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Fiche BC (lignes, total) */ get: operations["getPurchaseOrder"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/purchase-orders/{id}/transition": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Envoyer / réceptionner (→ entrées de stock, PU figés) / annuler */ post: operations["transitionPurchaseOrder"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/work-orders/{id}/consume-part": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Consommer une pièce sur l’OT — stock décrémenté, PRIX FIGÉ */ post: operations["consumePart"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/work-orders/{id}/labor": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Saisir de la main-d’œuvre — TAUX FIGÉ à la saisie */ post: operations["addLaborTime"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/portal/assets/{reference}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Résoudre le QR scanné (référence → appareil, préremplissage) */ get: operations["getPortalAsset"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/portal/requests": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Signaler sans compte — renvoie le jeton de suivi (à garder sur le téléphone) */ post: operations["createPortalRequest"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/portal/requests/{reference}/{token}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Suivi sans jargon (Reçu → Intervention → Résolu) — jeton requis */ get: operations["getPortalRequestStatus"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/preventive/templates": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Gabarits de tâches du préventif (périodicité en mois) */ get: operations["listTaskTemplates"]; put?: never; /** Ajouter un gabarit */ post: operations["createTaskTemplate"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/preventive/templates/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; delete?: never; options?: never; head?: never; /** Modifier / (dés)activer un gabarit — jamais de suppression si utilisé */ patch: operations["updateTaskTemplate"]; trace?: never; }; "/preventive/generate": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Générer la grille du mois — IDEMPOTENT (regénérer ne double rien) */ post: operations["generatePreventive"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/preventive/status": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** État du mois courant (générées, terminées, en retard, premiers contrôles) */ get: operations["getPreventiveStatus"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/assets/{id}/meters": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Compteurs de l’appareil (relevés récents d’abord) */ get: operations["getAssetMeters"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/assets/{id}/meter-readings": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Enregistrer un relevé — strictement croissant */ post: operations["addMeterReading"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/work-orders": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Ordres de travail (sans « voir autre » : seulement les siens) */ get: operations["listWorkOrders"]; put?: never; /** Créer un OT (statut Ouvert) */ post: operations["createWorkOrder"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/work-orders/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Fiche OT (activité, checklist, bilan, transitions autorisées, blocages de clôture) */ get: operations["getWorkOrder"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/work-orders/{id}/transition": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Changer l’état (machine à états stricte ; DONE exige bilan + checklist) */ post: operations["transitionWorkOrder"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/work-orders/{id}/comments": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Commenter (activité chronologique) */ post: operations["commentWorkOrder"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/work-orders/{id}/assignees": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; /** Assigner (remplace la liste) */ put: operations["setWorkOrderAssignees"]; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/work-orders/{id}/report": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; /** Renseigner le bilan codé (null efface un champ) */ put: operations["upsertWorkOrderReport"]; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/work-orders/{id}/checklist/{itemId}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; delete?: never; options?: never; head?: never; /** Régler une tâche de la grille (Fait / N-A / à faire) */ patch: operations["patchChecklistItem"]; trace?: never; }; "/requests": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Demandes (sans « voir autre » : seulement les siennes) */ get: operations["listRequests"]; put?: never; /** Signaler (interne — le portail public QR arrive en R2.4) */ post: operations["createRequest"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/requests/{id}/approve": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Approuver → crée l’OT lié (1-1, jamais de doublon) */ post: operations["approveRequest"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/requests/{id}/reject": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Rejeter — motif obligatoire, lisible côté demandeur */ post: operations["rejectRequest"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/reference-values": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Référentiels du bilan codé (6 champs) */ get: operations["listReferenceValues"]; put?: never; /** Ajouter une valeur de référentiel */ post: operations["createReferenceValue"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/reference-values/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; delete?: never; options?: never; head?: never; /** Renommer ou (dés)activer — jamais de suppression si utilisée */ patch: operations["updateReferenceValue"]; trace?: never; }; "/health": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** État des dépendances (base, Redis, stockage) */ get: operations["getHealth"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; } export type webhooks = Record; export interface components { schemas: { AuthResponse: { accessToken: string; user: { /** Format: uuid */ id: string; /** Format: email */ email: string; displayName: string; role: { /** Format: uuid */ id: string; /** @enum {string} */ name: "Administrateur" | "Dispatcher" | "Technicien" | "Technicien limité" | "Gestionnaire" | "Demandeur" | "Vue seule"; }; isDemo: boolean; }; }; LoginRequest: { /** Format: email */ email: string; password: string; }; DemoAccountsResponse: { accounts: { /** Format: uuid */ id: string; displayName: string; /** @enum {string} */ roleName: "Administrateur" | "Dispatcher" | "Technicien" | "Technicien limité" | "Gestionnaire" | "Demandeur" | "Vue seule"; initials: string; }[]; }; DemoLoginRequest: { /** Format: uuid */ userId: string; }; MeResponse: { /** Format: uuid */ id: string; /** Format: email */ email: string; displayName: string; role: { /** Format: uuid */ id: string; /** @enum {string} */ name: "Administrateur" | "Dispatcher" | "Technicien" | "Technicien limité" | "Gestionnaire" | "Demandeur" | "Vue seule"; }; isDemo: boolean; permissions: { /** @enum {string} */ objectCategory: "WORK_ORDERS" | "REQUESTS" | "ASSETS" | "LOCATIONS" | "METERS" | "PARTS" | "PURCHASE_ORDERS" | "PEOPLE_TEAMS" | "ANALYTICS" | "SETTINGS"; canView: boolean; canViewOther: boolean; canCreate: boolean; canEdit: boolean; canDelete: boolean; }[]; }; ActivateRequest: { token: string; password: string; }; CategoriesResponse: { categories: { /** Format: uuid */ id: string; /** @enum {string} */ kind: "EQUIPMENT" | "COMPONENT_TYPE"; name: string; isActive: boolean; usageCount: number; }[]; }; Category: { /** Format: uuid */ id: string; /** @enum {string} */ kind: "EQUIPMENT" | "COMPONENT_TYPE"; name: string; isActive: boolean; usageCount: number; }; CategoryCreate: { /** @enum {string} */ kind: "EQUIPMENT" | "COMPONENT_TYPE"; name: string; }; CategoryUpdate: { name?: string; isActive?: boolean; }; LocationsResponse: { locations: { /** Format: uuid */ id: string; name: string; parentId: string | null; address: string | null; city: string | null; guardianName: string | null; guardianPhone: string | null; latitude: number | null; longitude: number | null; partnerId: string | null; partnerName: string | null; assetCount: number; }[]; }; Location: { /** Format: uuid */ id: string; name: string; parentId: string | null; address: string | null; city: string | null; guardianName: string | null; guardianPhone: string | null; latitude: number | null; longitude: number | null; partnerId: string | null; partnerName: string | null; assetCount: number; }; LocationCreate: { name: string; /** Format: uuid */ parentId?: string; address?: string; city?: string; guardianName?: string; guardianPhone?: string; latitude?: number; longitude?: number; partnerId?: string | null; }; LocationUpdate: { name?: string; /** Format: uuid */ parentId?: string; address?: string; city?: string; guardianName?: string; guardianPhone?: string; latitude?: number; longitude?: number; partnerId?: string | null; }; AssetsResponse: { assets: { /** Format: uuid */ id: string; reference: string; brand: string; model: string | null; serialNumber: string | null; commissionedAt: string | null; loadKg: number | null; floors: number | null; /** @enum {string} */ status: "IN_SERVICE" | "OUT_OF_SERVICE" | "UNDER_MAINTENANCE"; /** Format: uuid */ categoryId: string; categoryName: string; /** Format: uuid */ locationId: string; locationName: string; siteName: string; componentCount: number; }[]; }; AssetOptionsResponse: { options: { /** Format: uuid */ id: string; reference: string; siteName: string; }[]; }; AssetDetail: { /** Format: uuid */ id: string; reference: string; brand: string; model: string | null; serialNumber: string | null; commissionedAt: string | null; loadKg: number | null; floors: number | null; /** @enum {string} */ status: "IN_SERVICE" | "OUT_OF_SERVICE" | "UNDER_MAINTENANCE"; /** Format: uuid */ categoryId: string; categoryName: string; /** Format: uuid */ locationId: string; locationName: string; siteName: string; componentCount: number; components: { /** Format: uuid */ id: string; /** Format: uuid */ typeId: string; typeName: string; designation: string | null; }[]; }; AssetCreate: { reference: string; brand: string; model?: string; serialNumber?: string; /** Format: date-time */ commissionedAt?: string; loadKg?: number; floors?: number; /** Format: uuid */ categoryId: string; /** Format: uuid */ locationId: string; components?: { /** Format: uuid */ typeId: string; designation?: string; }[]; }; AssetUpdate: { reference?: string; brand?: string; model?: string; serialNumber?: string; /** Format: date-time */ commissionedAt?: string; loadKg?: number; floors?: number; /** Format: uuid */ categoryId?: string; /** Format: uuid */ locationId?: string; /** @enum {string} */ status?: "IN_SERVICE" | "OUT_OF_SERVICE" | "UNDER_MAINTENANCE"; }; AssetComponent: { /** Format: uuid */ id: string; /** Format: uuid */ typeId: string; typeName: string; designation: string | null; }; AssetComponentCreate: { /** Format: uuid */ typeId: string; designation?: string; }; TeamsResponse: { teams: { /** Format: uuid */ id: string; name: string; description: string | null; members: { /** Format: uuid */ id: string; displayName: string; roleName: string; initials: string; }[]; }[]; }; Team: { /** Format: uuid */ id: string; name: string; description: string | null; members: { /** Format: uuid */ id: string; displayName: string; roleName: string; initials: string; }[]; }; TeamCreate: { name: string; description?: string; memberIds?: string[]; }; TeamUpdate: { name?: string; description?: string; memberIds?: string[]; }; UsersResponse: { users: { /** Format: uuid */ id: string; /** Format: email */ email: string; displayName: string; phone: string | null; role: { /** Format: uuid */ id: string; /** @enum {string} */ name: "Administrateur" | "Dispatcher" | "Technicien" | "Technicien limité" | "Gestionnaire" | "Demandeur" | "Vue seule"; }; teams: { /** Format: uuid */ id: string; name: string; }[]; /** @enum {string} */ status: "active" | "invited" | "disabled"; isDemo: boolean; hourlyRate: number | null; }[]; }; RolesResponse: { roles: { /** Format: uuid */ id: string; /** @enum {string} */ name: "Administrateur" | "Dispatcher" | "Technicien" | "Technicien limité" | "Gestionnaire" | "Demandeur" | "Vue seule"; }[]; }; InvitationResponse: { /** Format: uuid */ userId: string; activationToken: string; /** Format: date-time */ expiresAt: string; }; InvitationCreate: { /** Format: email */ email: string; displayName: string; /** Format: uuid */ roleId: string; teamIds?: string[]; phone?: string; }; UserAdmin: { /** Format: uuid */ id: string; /** Format: email */ email: string; displayName: string; phone: string | null; role: { /** Format: uuid */ id: string; /** @enum {string} */ name: "Administrateur" | "Dispatcher" | "Technicien" | "Technicien limité" | "Gestionnaire" | "Demandeur" | "Vue seule"; }; teams: { /** Format: uuid */ id: string; name: string; }[]; /** @enum {string} */ status: "active" | "invited" | "disabled"; isDemo: boolean; hourlyRate: number | null; }; UserUpdate: { displayName?: string; phone?: string; /** Format: uuid */ roleId?: string; teamIds?: string[]; isActive?: boolean; hourlyRate?: number | null; }; DocumentsResponse: { documents: { /** Format: uuid */ id: string; /** @enum {string} */ kind: "NOTICE" | "CERTIFICATE" | "PHOTO" | "OTHER"; fileName: string; size: number; contentType: string; assetReference: string | null; workOrderReference: string | null; uploadedByName: string | null; /** Format: date-time */ createdAt: string; inCorpus: boolean; indexedAt: string | null; chunkCount: number; }[]; }; Document: { /** Format: uuid */ id: string; /** @enum {string} */ kind: "NOTICE" | "CERTIFICATE" | "PHOTO" | "OTHER"; fileName: string; size: number; contentType: string; assetReference: string | null; workOrderReference: string | null; uploadedByName: string | null; /** Format: date-time */ createdAt: string; inCorpus: boolean; indexedAt: string | null; chunkCount: number; }; DocumentCorpusUpdate: { inCorpus: boolean; }; AnalyticsSummary: { months: number; monthCost: number; previousMonthCost: number; closed: { total: number; preventive: number; }; preventiveRate: number | null; avgResolutionDays: number | null; failuresByComponent: { label: string; count: number; }[]; costsByMonth: { month: string; total: number; }[]; topAssets: { reference: string; siteName: string; correctives: number; partsCost: number; laborCost: number; total: number; }[]; }; AssistantAnswer: { /** @enum {string} */ mode: "EXTRACTIVE" | "GENERATED" | "REFUSAL"; answer: string | null; excerpts: { /** @enum {string} */ sourceType: "DOCUMENT" | "WORK_ORDER"; documentId: string | null; workOrderId: string | null; title: string; locator: string; content: string; score: number; }[]; corpus: { documents: number; reports: number; }; }; AssistantAsk: { question: string; }; BilanSuggestions: { suggestions: { /** @enum {string} */ field: "DOOR_STATE" | "CABIN_POSITION" | "ANOMALY" | "EXTERNAL_CAUSE" | "ACTION_TAKEN" | "COMPONENT_CONCERNED"; /** Format: uuid */ valueId: string; label: string; /** @enum {string} */ confidence: "HIGH" | "MEDIUM"; similarReports: number; score: number; }[]; }; SuggestBilan: { description: string; }; ReindexResult: { documentsIndexed: number; documentsSkipped: number; reportsIndexed: number; chunks: number; }; SearchResponse: { workOrders: { /** Format: uuid */ id: string; reference: string; title: string; /** @enum {string} */ status: "OPEN" | "IN_PROGRESS" | "ON_HOLD" | "DONE" | "CANCELLED"; }[]; assets: { /** Format: uuid */ id: string; reference: string; brand: string; model: string | null; siteName: string; }[]; sites: { /** Format: uuid */ id: string; name: string; city: string | null; }[]; }; PartnersResponse: { partners: { /** Format: uuid */ id: string; name: string; /** @enum {string} */ kind: "SUPPLIER" | "CLIENT"; contactName: string | null; phone: string | null; email: string | null; city: string | null; isActive: boolean; openOrders: number; siteNames: string[]; }[]; }; Partner: { /** Format: uuid */ id: string; name: string; /** @enum {string} */ kind: "SUPPLIER" | "CLIENT"; contactName: string | null; phone: string | null; email: string | null; city: string | null; isActive: boolean; openOrders: number; siteNames: string[]; }; PartnerCreate: { name: string; /** @enum {string} */ kind: "SUPPLIER" | "CLIENT"; contactName?: string; phone?: string; /** Format: email */ email?: string; city?: string; }; PartnerUpdate: { name?: string; /** @enum {string} */ kind?: "SUPPLIER" | "CLIENT"; contactName?: string; phone?: string; /** Format: email */ email?: string; city?: string; isActive?: boolean; }; PartsResponse: { parts: { /** Format: uuid */ id: string; reference: string; designation: string; threshold: number; lastUnitPrice: number | null; compatible: string | null; supplierId: string | null; supplierName: string | null; isActive: boolean; stock: number; belowThreshold: boolean; }[]; }; PartDetail: { /** Format: uuid */ id: string; reference: string; designation: string; threshold: number; lastUnitPrice: number | null; compatible: string | null; supplierId: string | null; supplierName: string | null; isActive: boolean; stock: number; belowThreshold: boolean; movements: { /** Format: uuid */ id: string; /** @enum {string} */ kind: "RECEIPT" | "ENTRY" | "CONSUMPTION" | "ADJUSTMENT"; quantity: number; unitPrice: number | null; reason: string | null; workOrderReference: string | null; purchaseOrderReference: string | null; byName: string | null; /** Format: date-time */ createdAt: string; }[]; }; PartCreate: { designation: string; threshold?: number; /** Format: uuid */ supplierId?: string; compatible?: string; initialPrice?: number; }; PartUpdate: { designation?: string; threshold?: number; supplierId?: string | null; compatible?: string | null; isActive?: boolean; }; StockMovementCreate: { /** @enum {string} */ kind: "ENTRY" | "ADJUSTMENT"; quantity: number; reason?: string; }; PurchaseOrdersResponse: { purchaseOrders: { /** Format: uuid */ id: string; reference: string; /** @enum {string} */ status: "DRAFT" | "SENT" | "RECEIVED" | "CANCELLED"; /** Format: uuid */ supplierId: string; supplierName: string; lines: { /** Format: uuid */ id: string; /** Format: uuid */ partId: string; partReference: string; designation: string; quantity: number; unitPrice: number; }[]; total: number; sentAt: string | null; receivedAt: string | null; /** Format: date-time */ createdAt: string; }[]; }; PurchaseOrder: { /** Format: uuid */ id: string; reference: string; /** @enum {string} */ status: "DRAFT" | "SENT" | "RECEIVED" | "CANCELLED"; /** Format: uuid */ supplierId: string; supplierName: string; lines: { /** Format: uuid */ id: string; /** Format: uuid */ partId: string; partReference: string; designation: string; quantity: number; unitPrice: number; }[]; total: number; sentAt: string | null; receivedAt: string | null; /** Format: date-time */ createdAt: string; }; PurchaseOrderCreate: { /** Format: uuid */ supplierId: string; lines: { /** Format: uuid */ partId: string; quantity: number; unitPrice: number; }[]; }; PurchaseOrderTransition: { /** @enum {string} */ to: "SENT" | "RECEIVED" | "CANCELLED"; }; WorkOrderDetail: { /** Format: uuid */ id: string; reference: string; title: string; /** @enum {string} */ type: "CORRECTIVE" | "PREVENTIVE" | "WORKS"; /** @enum {string} */ status: "OPEN" | "IN_PROGRESS" | "ON_HOLD" | "DONE" | "CANCELLED"; /** @enum {string} */ priority: "NONE" | "LOW" | "MEDIUM" | "HIGH" | "PERSON_TRAPPED"; /** Format: uuid */ assetId: string; assetReference: string; siteName: string; dueDate: string | null; assignees: { /** Format: uuid */ id: string; displayName: string; initials: string; }[]; /** Format: date-time */ createdAt: string; description: string | null; locationName: string; startedAt: string | null; completedAt: string | null; cancelledAt: string | null; createdBy: { /** Format: uuid */ id: string; displayName: string; initials: string; } | null; request: { /** Format: uuid */ id: string; reference: string; requesterLabel: string; } | null; events: { /** Format: uuid */ id: string; kind: string; message: string | null; by: { /** Format: uuid */ id: string; displayName: string; initials: string; } | null; /** Format: date-time */ createdAt: string; }[]; checklist: { /** Format: uuid */ id: string; label: string; /** @enum {string} */ state: "PENDING" | "DONE" | "NA"; doneBy: { /** Format: uuid */ id: string; displayName: string; initials: string; } | null; doneAt: string | null; }[]; report: { note: string | null; doorState: { /** Format: uuid */ id: string; label: string; } | null; cabinPosition: { /** Format: uuid */ id: string; label: string; } | null; anomaly: { /** Format: uuid */ id: string; label: string; } | null; externalCause: { /** Format: uuid */ id: string; label: string; } | null; actionTaken: { /** Format: uuid */ id: string; label: string; } | null; componentConcerned: { /** Format: uuid */ id: string; label: string; } | null; } | null; costs: { parts: { /** Format: uuid */ id: string; designation: string; quantity: number; unitPrice: number; total: number; }[]; labor: { /** Format: uuid */ id: string; displayName: string; minutes: number; hourlyRate: number; total: number; note: string | null; }[]; total: number; }; allowedTransitions: ("OPEN" | "IN_PROGRESS" | "ON_HOLD" | "DONE" | "CANCELLED")[]; closureBlockers: string[]; /** Format: date-time */ updatedAt: string; }; ConsumePart: { /** Format: uuid */ partId: string; quantity: number; }; LaborTimeCreate: { minutes: number; /** Format: uuid */ userId?: string; note?: string; }; PortalAsset: { reference: string; siteName: string; locationName: string; }; PortalRequestCreated: { reference: string; description: string; isPersonTrapped: boolean; /** @enum {string} */ status: "RECEIVED" | "APPROVED" | "REJECTED"; /** @enum {string} */ step: "RECEIVED" | "IN_PROGRESS" | "RESOLVED"; rejectionReason: string | null; /** Format: date-time */ createdAt: string; publicToken: string; }; PortalRequestCreate: { assetReference: string; description: string; isPersonTrapped?: boolean; requesterName?: string; }; PortalRequestStatus: { reference: string; description: string; isPersonTrapped: boolean; /** @enum {string} */ status: "RECEIVED" | "APPROVED" | "REJECTED"; /** @enum {string} */ step: "RECEIVED" | "IN_PROGRESS" | "RESOLVED"; rejectionReason: string | null; /** Format: date-time */ createdAt: string; }; TaskTemplatesResponse: { templates: { /** Format: uuid */ id: string; label: string; periodMonths: number; isRegulatory: boolean; isActive: boolean; componentTypeId: string | null; componentTypeName: string | null; }[]; }; TaskTemplate: { /** Format: uuid */ id: string; label: string; periodMonths: number; isRegulatory: boolean; isActive: boolean; componentTypeId: string | null; componentTypeName: string | null; }; TaskTemplateCreate: { label: string; periodMonths: number; /** Format: uuid */ componentTypeId?: string; isRegulatory?: boolean; }; TaskTemplateUpdate: { label?: string; periodMonths?: number; componentTypeId?: string | null; isRegulatory?: boolean; isActive?: boolean; }; PreventiveGenerationResult: { month: string; created: number; skipped: number; firstControls: number; references: string[]; }; PreventiveGenerate: { month?: string; }; PreventiveStatus: { month: string; assetsUnderContract: number; generated: number; done: number; late: number; firstControls: number; }; MetersResponse: { meters: { /** @enum {string} */ kind: "RUNNING_HOURS" | "STARTS"; readings: { /** Format: uuid */ id: string; value: number; readBy: { /** Format: uuid */ id: string; displayName: string; } | null; /** Format: date-time */ createdAt: string; }[]; }[]; }; MeterReadingCreate: { /** @enum {string} */ kind: "RUNNING_HOURS" | "STARTS"; value: number; }; WorkOrdersResponse: { workOrders: { /** Format: uuid */ id: string; reference: string; title: string; /** @enum {string} */ type: "CORRECTIVE" | "PREVENTIVE" | "WORKS"; /** @enum {string} */ status: "OPEN" | "IN_PROGRESS" | "ON_HOLD" | "DONE" | "CANCELLED"; /** @enum {string} */ priority: "NONE" | "LOW" | "MEDIUM" | "HIGH" | "PERSON_TRAPPED"; /** Format: uuid */ assetId: string; assetReference: string; siteName: string; dueDate: string | null; assignees: { /** Format: uuid */ id: string; displayName: string; initials: string; }[]; /** Format: date-time */ createdAt: string; }[]; }; WorkOrderCreate: { title: string; description?: string; /** @enum {string} */ type: "CORRECTIVE" | "PREVENTIVE" | "WORKS"; /** @enum {string} */ priority?: "NONE" | "LOW" | "MEDIUM" | "HIGH" | "PERSON_TRAPPED"; /** Format: uuid */ assetId: string; /** Format: date-time */ dueDate?: string; assigneeIds?: string[]; }; TransitionRequest: { /** @enum {string} */ to: "OPEN" | "IN_PROGRESS" | "ON_HOLD" | "DONE" | "CANCELLED"; comment?: string; /** Format: date-time */ baseUpdatedAt?: string; }; CommentCreate: { message: string; }; AssigneesUpdate: { assigneeIds: string[]; }; ReportUpsert: { note?: string | null; doorStateId?: string | null; cabinPositionId?: string | null; anomalyId?: string | null; externalCauseId?: string | null; actionTakenId?: string | null; componentConcernedId?: string | null; /** Format: date-time */ baseUpdatedAt?: string; }; ChecklistItem: { /** Format: uuid */ id: string; label: string; /** @enum {string} */ state: "PENDING" | "DONE" | "NA"; doneBy: { /** Format: uuid */ id: string; displayName: string; initials: string; } | null; doneAt: string | null; }; ChecklistPatch: { /** @enum {string} */ state: "PENDING" | "DONE" | "NA"; /** Format: date-time */ baseUpdatedAt?: string; }; RequestsResponse: { requests: { /** Format: uuid */ id: string; reference: string; description: string; isPersonTrapped: boolean; /** @enum {string} */ status: "RECEIVED" | "APPROVED" | "REJECTED"; rejectionReason: string | null; /** Format: uuid */ assetId: string; assetReference: string; siteName: string; requesterLabel: string; workOrder: { /** Format: uuid */ id: string; reference: string; /** @enum {string} */ status: "OPEN" | "IN_PROGRESS" | "ON_HOLD" | "DONE" | "CANCELLED"; } | null; /** Format: date-time */ createdAt: string; }[]; }; RequestSummary: { /** Format: uuid */ id: string; reference: string; description: string; isPersonTrapped: boolean; /** @enum {string} */ status: "RECEIVED" | "APPROVED" | "REJECTED"; rejectionReason: string | null; /** Format: uuid */ assetId: string; assetReference: string; siteName: string; requesterLabel: string; workOrder: { /** Format: uuid */ id: string; reference: string; /** @enum {string} */ status: "OPEN" | "IN_PROGRESS" | "ON_HOLD" | "DONE" | "CANCELLED"; } | null; /** Format: date-time */ createdAt: string; }; RequestCreate: { /** Format: uuid */ assetId: string; description: string; isPersonTrapped?: boolean; }; RequestApprove: { title?: string; /** @enum {string} */ priority?: "NONE" | "LOW" | "MEDIUM" | "HIGH" | "PERSON_TRAPPED"; assigneeIds?: string[]; /** Format: date-time */ dueDate?: string; }; RequestReject: { reason: string; }; ReferenceValuesResponse: { referenceValues: { /** Format: uuid */ id: string; /** @enum {string} */ field: "DOOR_STATE" | "CABIN_POSITION" | "ANOMALY" | "EXTERNAL_CAUSE" | "ACTION_TAKEN" | "COMPONENT_CONCERNED"; label: string; isActive: boolean; usageCount: number; }[]; }; ReferenceValue: { /** Format: uuid */ id: string; /** @enum {string} */ field: "DOOR_STATE" | "CABIN_POSITION" | "ANOMALY" | "EXTERNAL_CAUSE" | "ACTION_TAKEN" | "COMPONENT_CONCERNED"; label: string; isActive: boolean; usageCount: number; }; ReferenceValueCreate: { /** @enum {string} */ field: "DOOR_STATE" | "CABIN_POSITION" | "ANOMALY" | "EXTERNAL_CAUSE" | "ACTION_TAKEN" | "COMPONENT_CONCERNED"; label: string; }; ReferenceValueUpdate: { label?: string; isActive?: boolean; }; HealthResponse: { /** @enum {string} */ status: "ok" | "degraded"; services: { /** @enum {string} */ database: "up" | "down"; /** @enum {string} */ redis: "up" | "down"; /** @enum {string} */ storage: "up" | "down"; }; }; }; responses: never; parameters: never; requestBodies: never; headers: never; pathItems: never; } export type $defs = Record; export interface operations { login: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["LoginRequest"]; }; }; responses: { /** @description Jeton émis */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AuthResponse"]; }; }; /** @description Identifiants invalides ou compte inactif */ 401: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listDemoAccounts: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Comptes isDemo actifs */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["DemoAccountsResponse"]; }; }; }; }; demoLogin: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["DemoLoginRequest"]; }; }; responses: { /** @description Jeton émis */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AuthResponse"]; }; }; /** @description Le compte n’est pas un compte de démonstration */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Compte inconnu */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; getMe: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Profil */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["MeResponse"]; }; }; /** @description Non authentifié */ 401: { headers: { [name: string]: unknown; }; content?: never; }; }; }; activateAccount: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ActivateRequest"]; }; }; responses: { /** @description Compte activé et connecté */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AuthResponse"]; }; }; /** @description Lien invalide ou expiré */ 400: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listCategories: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Liste */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CategoriesResponse"]; }; }; }; }; createCategory: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CategoryCreate"]; }; }; responses: { /** @description Créée */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["Category"]; }; }; /** @description Nom déjà utilisé pour ce type */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; updateCategory: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CategoryUpdate"]; }; }; responses: { /** @description Mise à jour */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["Category"]; }; }; /** @description Inconnue */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listLocations: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Liste */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["LocationsResponse"]; }; }; }; }; createLocation: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["LocationCreate"]; }; }; responses: { /** @description Créé */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["Location"]; }; }; /** @description Hiérarchie trop profonde */ 400: { headers: { [name: string]: unknown; }; content?: never; }; }; }; updateLocation: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["LocationUpdate"]; }; }; responses: { /** @description Mis à jour */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["Location"]; }; }; /** @description Inconnu */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listAssets: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Liste */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AssetsResponse"]; }; }; }; }; createAsset: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["AssetCreate"]; }; }; responses: { /** @description Créé */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AssetDetail"]; }; }; /** @description Référence déjà utilisée */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listAssetOptions: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Options */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AssetOptionsResponse"]; }; }; }; }; getAsset: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Fiche */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AssetDetail"]; }; }; /** @description Inconnu */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; updateAsset: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["AssetUpdate"]; }; }; responses: { /** @description Mis à jour */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AssetDetail"]; }; }; /** @description Inconnu */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; addAssetComponent: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["AssetComponentCreate"]; }; }; responses: { /** @description Ajouté */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AssetComponent"]; }; }; /** @description Le type choisi n’est pas un type d’organe */ 400: { headers: { [name: string]: unknown; }; content?: never; }; }; }; removeAssetComponent: { parameters: { query?: never; header?: never; path: { id: string; componentId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Retiré */ 204: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Inconnu */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listTeams: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Liste */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TeamsResponse"]; }; }; }; }; createTeam: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["TeamCreate"]; }; }; responses: { /** @description Créée */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["Team"]; }; }; /** @description Nom déjà utilisé */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; updateTeam: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["TeamUpdate"]; }; }; responses: { /** @description Mise à jour */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["Team"]; }; }; /** @description Inconnue */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listUsers: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Liste */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["UsersResponse"]; }; }; }; }; listRoles: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Liste */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["RolesResponse"]; }; }; }; }; inviteUser: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["InvitationCreate"]; }; }; responses: { /** @description Invitation émise */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["InvitationResponse"]; }; }; /** @description Email déjà utilisé */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; resendInvitation: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Nouveau lien */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["InvitationResponse"]; }; }; /** @description Compte déjà activé */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; updateUser: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UserUpdate"]; }; }; responses: { /** @description Mise à jour */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["UserAdmin"]; }; }; /** @description Inconnue */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listDocuments: { parameters: { query?: { assetId?: string; workOrderId?: string; kind?: string; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Liste */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["DocumentsResponse"]; }; }; }; }; uploadDocument: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "multipart/form-data": { /** Format: binary */ file: string; kind?: string; assetId?: string; workOrderId?: string; }; }; }; responses: { /** @description Document rangé */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["Document"]; }; }; /** @description Type/taille refusé ou rattachement manquant */ 400: { headers: { [name: string]: unknown; }; content?: never; }; }; }; downloadDocument: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Fichier */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Inconnu */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; updateDocumentCorpus: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["DocumentCorpusUpdate"]; }; }; responses: { /** @description Document mis à jour */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["Document"]; }; }; /** @description Inconnu */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; deleteDocument: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Supprimé */ 204: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Inconnu */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; getAnalyticsSummary: { parameters: { query?: { months?: string; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Synthèse */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AnalyticsSummary"]; }; }; }; }; askAssistant: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["AssistantAsk"]; }; }; responses: { /** @description Réponse sourcée ou refus */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AssistantAnswer"]; }; }; /** @description Service IA indisponible */ 503: { headers: { [name: string]: unknown; }; content?: never; }; }; }; suggestBilan: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["SuggestBilan"]; }; }; responses: { /** @description Suggestions (codes existants seulement) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["BilanSuggestions"]; }; }; /** @description Service IA indisponible */ 503: { headers: { [name: string]: unknown; }; content?: never; }; }; }; reindexAssistant: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Bilan d’indexation */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ReindexResult"]; }; }; /** @description Service IA indisponible */ 503: { headers: { [name: string]: unknown; }; content?: never; }; }; }; globalSearch: { parameters: { query: { q: string; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Résultats (5 max par famille) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SearchResponse"]; }; }; }; }; listPartners: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Liste */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PartnersResponse"]; }; }; }; }; createPartner: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["PartnerCreate"]; }; }; responses: { /** @description Créé */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["Partner"]; }; }; /** @description Nom déjà utilisé */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; updatePartner: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["PartnerUpdate"]; }; }; responses: { /** @description Mis à jour */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["Partner"]; }; }; /** @description Inconnu */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listParts: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Liste */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PartsResponse"]; }; }; }; }; createPart: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["PartCreate"]; }; }; responses: { /** @description Créée */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PartDetail"]; }; }; }; }; getPart: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Fiche */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PartDetail"]; }; }; /** @description Inconnue */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; updatePart: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["PartUpdate"]; }; }; responses: { /** @description Mise à jour */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PartDetail"]; }; }; /** @description Inconnue */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; addStockMovement: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["StockMovementCreate"]; }; }; responses: { /** @description Mouvement tracé */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PartDetail"]; }; }; /** @description Le stock ne peut pas devenir négatif */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listPurchaseOrders: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Liste */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PurchaseOrdersResponse"]; }; }; }; }; createPurchaseOrder: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["PurchaseOrderCreate"]; }; }; responses: { /** @description Créé */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PurchaseOrder"]; }; }; /** @description Fournisseur ou pièce invalide */ 400: { headers: { [name: string]: unknown; }; content?: never; }; }; }; getPurchaseOrder: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Fiche */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PurchaseOrder"]; }; }; /** @description Inconnu */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; transitionPurchaseOrder: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["PurchaseOrderTransition"]; }; }; responses: { /** @description État changé */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PurchaseOrder"]; }; }; /** @description Transition interdite */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; consumePart: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ConsumePart"]; }; }; responses: { /** @description Consommée */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["WorkOrderDetail"]; }; }; /** @description Stock insuffisant ou prix inconnu */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; addLaborTime: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["LaborTimeCreate"]; }; }; responses: { /** @description Saisie */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["WorkOrderDetail"]; }; }; /** @description Taux horaire non défini pour cette personne */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; getPortalAsset: { parameters: { query?: never; header?: never; path: { reference: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Appareil */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PortalAsset"]; }; }; /** @description Référence inconnue */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; createPortalRequest: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["PortalRequestCreate"]; }; }; responses: { /** @description Signalement enregistré */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PortalRequestCreated"]; }; }; /** @description Référence inconnue */ 404: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Trop de signalements — réessayez dans une minute */ 429: { headers: { [name: string]: unknown; }; content?: never; }; }; }; getPortalRequestStatus: { parameters: { query?: never; header?: never; path: { reference: string; token: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Avancement */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PortalRequestStatus"]; }; }; /** @description Signalement inconnu ou jeton invalide */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listTaskTemplates: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Liste */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TaskTemplatesResponse"]; }; }; }; }; createTaskTemplate: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["TaskTemplateCreate"]; }; }; responses: { /** @description Créé */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TaskTemplate"]; }; }; /** @description Libellé déjà utilisé */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; updateTaskTemplate: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["TaskTemplateUpdate"]; }; }; responses: { /** @description Mis à jour */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TaskTemplate"]; }; }; /** @description Inconnu */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; generatePreventive: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["PreventiveGenerate"]; }; }; responses: { /** @description Résumé de génération */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PreventiveGenerationResult"]; }; }; }; }; getPreventiveStatus: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description État */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PreventiveStatus"]; }; }; }; }; getAssetMeters: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Compteurs */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["MetersResponse"]; }; }; /** @description Appareil inconnu */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; addMeterReading: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["MeterReadingCreate"]; }; }; responses: { /** @description Relevé enregistré */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["MetersResponse"]; }; }; /** @description Relevé inférieur ou égal au précédent */ 400: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listWorkOrders: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Liste */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["WorkOrdersResponse"]; }; }; }; }; createWorkOrder: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["WorkOrderCreate"]; }; }; responses: { /** @description Créé */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["WorkOrderDetail"]; }; }; }; }; getWorkOrder: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Fiche */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["WorkOrderDetail"]; }; }; /** @description Inconnu (ou hors de son périmètre) */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; transitionWorkOrder: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["TransitionRequest"]; }; }; responses: { /** @description État changé */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["WorkOrderDetail"]; }; }; /** @description Transition interdite ou clôture bloquée (garde) */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; commentWorkOrder: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CommentCreate"]; }; }; responses: { /** @description Commentaire ajouté */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["WorkOrderDetail"]; }; }; }; }; setWorkOrderAssignees: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["AssigneesUpdate"]; }; }; responses: { /** @description Assignés */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["WorkOrderDetail"]; }; }; }; }; upsertWorkOrderReport: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ReportUpsert"]; }; }; responses: { /** @description Bilan enregistré */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["WorkOrderDetail"]; }; }; /** @description Valeur hors référentiel du champ */ 400: { headers: { [name: string]: unknown; }; content?: never; }; }; }; patchChecklistItem: { parameters: { query?: never; header?: never; path: { id: string; itemId: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ChecklistPatch"]; }; }; responses: { /** @description Tâche réglée */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ChecklistItem"]; }; }; /** @description Tâche inconnue */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listRequests: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Liste */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["RequestsResponse"]; }; }; }; }; createRequest: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["RequestCreate"]; }; }; responses: { /** @description Demande créée */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["RequestSummary"]; }; }; }; }; approveRequest: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["RequestApprove"]; }; }; responses: { /** @description OT créé et lié */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["WorkOrderDetail"]; }; }; /** @description Demande déjà traitée */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; rejectRequest: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["RequestReject"]; }; }; responses: { /** @description Rejetée */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["RequestSummary"]; }; }; /** @description Demande déjà traitée */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listReferenceValues: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Liste */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ReferenceValuesResponse"]; }; }; }; }; createReferenceValue: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ReferenceValueCreate"]; }; }; responses: { /** @description Créée */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ReferenceValue"]; }; }; /** @description Libellé déjà présent pour ce champ */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; updateReferenceValue: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ReferenceValueUpdate"]; }; }; responses: { /** @description Mise à jour */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ReferenceValue"]; }; }; /** @description Inconnue */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; getHealth: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description État agrégé */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HealthResponse"]; }; }; }; }; }