{"openapi":"3.1.0","info":{"title":"Dataroia API","version":"2.0.0"},"paths":{"/api/auth/register":{"post":{"tags":["Auth"],"summary":"Register","operationId":"register_api_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRegister"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/verify-email":{"get":{"tags":["Auth"],"summary":"Verify Email","operationId":"verify_email_api_auth_verify_email_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/login":{"post":{"tags":["Auth"],"summary":"Login","operationId":"login_api_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLogin"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/reset-request":{"post":{"tags":["Auth"],"summary":"Reset Request","operationId":"reset_request_api_auth_reset_request_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/reset-confirm":{"post":{"tags":["Auth"],"summary":"Reset Confirm","operationId":"reset_confirm_api_auth_reset_confirm_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetConfirm"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/logout":{"post":{"tags":["Auth"],"summary":"Logout","description":"Révoque le JWT courant — le token sera rejeté jusqu'à expiration.","operationId":"logout_api_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/auth/me":{"get":{"tags":["Auth"],"summary":"Me","operationId":"me_api_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/dossier":{"get":{"tags":["Dossier"],"summary":"Get Dossier","operationId":"get_dossier_api_dossier_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DossierStatus"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/dossier/produit":{"patch":{"tags":["Dossier"],"summary":"Update Produit","description":"Le client choisit ses formules de diagnostic (multi-sélection).\nAccepte { \"produits\": [\"ct0\", \"ct2\"] } ou { \"produit\": \"ct0,ct2\" }.\nStocké en base sous forme CSV : \"ct0,ct2\".","operationId":"update_produit_api_dossier_produit_patch","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/profile":{"get":{"tags":["Dossier"],"summary":"Get Profile","description":"Retourne le profil enrichi du client (stocké en JSON dans le dossier).","operationId":"get_profile_api_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"put":{"tags":["Dossier"],"summary":"Update Profile","description":"Sauvegarde les informations de profil du client (ca_annuel, nb_commerciaux, societe…).","operationId":"update_profile_api_profile_put","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/dossier/mapping":{"get":{"tags":["Dossier"],"summary":"Get Dossier Mapping","description":"Retourne le dernier mapping Mappy confirmé pour ce client.","operationId":"get_dossier_mapping_api_dossier_mapping_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/dossier/status":{"patch":{"tags":["Dossier"],"summary":"Update Status","operationId":"update_status_api_dossier_status_patch","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminStatusUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/fichiers/upload":{"post":{"tags":["Fichiers"],"summary":"Upload File","operationId":"upload_file_api_fichiers_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_file_api_fichiers_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/fichiers/admin/rapport":{"post":{"tags":["Fichiers"],"summary":"Upload Rapport","operationId":"upload_rapport_api_fichiers_admin_rapport_post","parameters":[{"name":"user_id","in":"query","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"societe","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Societe"}},{"name":"ct_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ct Code"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_rapport_api_fichiers_admin_rapport_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/fichiers/rapport/rate":{"post":{"tags":["Fichiers"],"summary":"Rate Rapport","description":"Note client sur un rapport (1-10).\nnote >= 7 → validated → référence sectorielle pour le RAG Mistral.\nCorps : { sector, rapport_name, rating, comment? }","operationId":"rate_rapport_api_fichiers_rapport_rate_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/fichiers/rapport/ratings":{"get":{"tags":["Fichiers"],"summary":"Get Rapport Ratings","description":"Retourne les 5 dernières notes de rapport du client connecté.","operationId":"get_rapport_ratings_api_fichiers_rapport_ratings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/fichiers/rapport":{"get":{"tags":["Fichiers"],"summary":"Download Rapport","operationId":"download_rapport_api_fichiers_rapport_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/fichiers/rapport/{role}":{"get":{"tags":["Fichiers"],"summary":"Download Rapport Role","description":"Télécharge le rapport pour un rôle spécifique (dirigeant, commercial, dsi).\nSi produit est omis, utilise le produit le plus élevé disponible.","operationId":"download_rapport_role_api_fichiers_rapport__role__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"role","in":"path","required":true,"schema":{"type":"string","title":"Role"}},{"name":"produit","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Produit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/fichiers/fichier-redresse/status":{"get":{"tags":["Fichiers"],"summary":"Fichier Redresse Status","description":"Indique si un fichier redressé est disponible pour ce client.","operationId":"fichier_redresse_status_api_fichiers_fichier_redresse_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/fichiers/fichier-redresse":{"get":{"tags":["Fichiers"],"summary":"Download Fichier Redresse","description":"Télécharge le ZIP des CSV redressés (un fichier par entité).","operationId":"download_fichier_redresse_api_fichiers_fichier_redresse_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/mappy/upload":{"post":{"tags":["Mappy v2","Mappy v2"],"summary":"Mappy Upload","description":"Upload de 1 à 20 fichiers (CSV, JSON, XLSX, ZIP) pour une session Mappy.\nContrôles sécurité :\n- Extension + magic bytes de chaque fichier\n- Taille 50 Mo/fichier, 200 Mo total\n- 20 fichiers max\n- ZIP : ZIP bomb + path traversal + nesting\nRetourne session_id + token Mappy (4h).","operationId":"mappy_upload_api_mappy_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_mappy_upload_api_mappy_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mappy/progress/{session_id}":{"get":{"tags":["Mappy v2","Mappy v2"],"summary":"Mappy Progress","description":"Polling JS — état de la session Mappy (EN_ATTENTE / EN_COURS / MAPPING_A_VALIDER).","operationId":"mappy_progress_api_mappy_progress__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mappy/session/{session_id}":{"get":{"tags":["Mappy v2","Mappy v2"],"summary":"Mappy Session State","description":"Retourne l'état complet de la session : mapping, PK/FK, graphe, distribution couches.","operationId":"mappy_session_state_api_mappy_session__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mappy/{session_id}":{"get":{"tags":["Mappy v2","Mappy v2"],"summary":"Mappy Interface","description":"Interface Mappy v2 : PK/FK, graphe, badges couches, multi-fichiers.","operationId":"mappy_interface_api_mappy__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mappy/session/{session_id}/pkfk":{"post":{"tags":["Mappy v2","Mappy v2"],"summary":"Update Pkfk","description":"Permet à l'utilisateur de corriger/valider une détection PK ou FK.\nbody : {entity_type, column, override_type, target_entity, target_field}","operationId":"update_pkfk_api_mappy_session__session_id__pkfk_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mappy/session/{session_id}/confirm-mapping":{"post":{"tags":["Mappy v2","Mappy v2"],"summary":"Mappy Confirm Mapping","description":"Sauvegarde un ou plusieurs mappings colonne → champ CRM dans MappingMemory.\nCorps : { mappings: [{ original_col, crm_field, entity_type }] }\nnote >= 7 → référence sectorielle RAG Mistral.","operationId":"mappy_confirm_mapping_api_mappy_session__session_id__confirm_mapping_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mappy/confirm/{session_id}":{"post":{"tags":["Mappy v2","Mappy v2"],"summary":"Mappy Confirm","description":"Reçoit le mapping validé + relations confirmées.\nDéclenche le pipeline DRE sur VPS-1 si tout est validé.\nDonnées brutes JAMAIS envoyées à VPS-2 sans validation préalable ici.","operationId":"mappy_confirm_api_mappy_confirm__session_id__post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schema/upload":{"post":{"tags":["Schema Validation","Schema Validation"],"summary":"Upload File","description":"Reçoit le fichier ZIP/CSV/XLSX/XLS/JSON du client.\nLance SchemaResolver sur VPS-1 en fire-and-forget.\nRetourne upload_id + token de validation (24h).","operationId":"upload_file_api_schema_upload_post","parameters":[{"name":"client_id","in":"query","required":false,"schema":{"type":"string","title":"Client Id"}},{"name":"token","in":"query","required":false,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_file_api_schema_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schema/flash-anonyme":{"post":{"tags":["Schema Validation","Schema Validation"],"summary":"Flash Anonyme Upload","description":"CT0 Flash anonyme : upload public sans compte, plafonné à 1 000 lignes.\nRéutilise le pipeline flash existant (GET /schema/flash/{upload_id}).\nRéponse identique à /schema/upload?produit=ct0 (+ nb_lignes), ou\n{\"limit_exceeded\": true} si le fichier dépasse le plafond.","operationId":"flash_anonyme_upload_api_schema_flash_anonyme_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_flash_anonyme_upload_api_schema_flash_anonyme_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schema/propose/{upload_id}":{"get":{"tags":["Schema Validation","Schema Validation"],"summary":"Get Mapping Proposal","description":"Retourne le MultiEntityResolution généré par L0.\nSi L0 encore en cours → EN_ATTENTE + progression.\nSi L0 terminée → mapping_proposal complet.","operationId":"get_mapping_proposal_api_schema_propose__upload_id__get","parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","title":"Upload Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schema/progress/{upload_id}":{"get":{"tags":["Schema Validation","Schema Validation"],"summary":"Get Validation Progress","description":"Progression de la validation mapping.\nUtilisé par le polling JavaScript toutes les 3 secondes.","operationId":"get_validation_progress_api_schema_progress__upload_id__get","parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","title":"Upload Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schema/validate/{upload_id}":{"get":{"tags":["Schema Validation","Schema Validation"],"summary":"Validation Interface","description":"Sert la page HTML Jinja2 de validation du mapping.\nToken vérifié (24h), sinon page expirée.","operationId":"validation_interface_api_schema_validate__upload_id__get","parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","title":"Upload Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schema/diagnostic/{upload_id}":{"get":{"tags":["Schema Validation","Schema Validation"],"summary":"Diagnostic Interface","description":"Mapping déterministe 5 couches + diagnostic prédictif (technique, légal,\nRGPD, coût, ROIA). Remplace l'ancienne page de validation L0.\nAucun appel Ollama pour l'affichage — 100% déterministe.","operationId":"diagnostic_interface_api_schema_diagnostic__upload_id__get","parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","title":"Upload Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schema/diagnostic/{upload_id}/rule":{"post":{"tags":["Schema Validation","Schema Validation"],"summary":"Add Custom Rule","description":"Ajoute une règle métier custom saisie par le client.\nCatégorisée par Mistral local (async, n'impacte pas l'affichage).","operationId":"add_custom_rule_api_schema_diagnostic__upload_id__rule_post","parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","title":"Upload Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schema/confirm/{upload_id}":{"post":{"tags":["Schema Validation","Schema Validation"],"summary":"Confirm Mapping","description":"Reçoit le mapping validé/corrigé par le client.\nDéclenche le pipeline DRE sur VPS-1 si toutes les entités sont validées.","operationId":"confirm_mapping_api_schema_confirm__upload_id__post","parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","title":"Upload Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Mapping Confirmed"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schema/confirm-mapping":{"post":{"tags":["Schema Validation","Schema Validation"],"summary":"Save Column Mappings","description":"Sauvegarde un ou plusieurs mappings colonne → champ CRM confirmés\nmanuellement par le client depuis la page de validation.\nCorps : { mappings: [{ original_col, crm_field, entity_type }] }\nRetourne le nombre de colonnes sauvegardées.","operationId":"save_column_mappings_api_schema_confirm_mapping_post","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schema/history/{client_id}":{"get":{"tags":["Schema Validation","Schema Validation"],"summary":"Get Mapping History","description":"Historique des mappings validés pour un client.\nUtilisé par l'onglet \"Mon Mapping\" de l'espace client.","operationId":"get_mapping_history_api_schema_history__client_id__get","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schema/report/rate":{"post":{"tags":["Schema Validation","Schema Validation"],"summary":"Rate Report","description":"Enregistre la note (1-10) d'un client sur un rapport.\nnote >= 7 → validated = True → utilisé comme référence sectorielle pour Mistral.\nCorps : { sector, report_excerpt, rating, comment? }","operationId":"rate_report_api_schema_report_rate_post","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schema/ct0-mapping/{upload_id}":{"post":{"tags":["Schema Validation","Schema Validation"],"summary":"Save Ct0 Mapping","description":"Sauvegarde le mini-mapping colonnes CT0 dans meta.json.\nbody = {\n  entity_type: \"companies\" | \"contacts\" | \"both\",\n  companies: {siret: \"col\", raison_sociale: \"col\", email: \"col\",\n              telephone: \"col\", adresse: \"col\", code_postal: \"col\",\n              ville: \"col\", adresse_complete: \"col\"},\n  contacts:  {prenom: \"col\", nom_contact: \"col\", email: \"col\",\n              telephone: \"col\", mobile: \"col\", adresse: \"col\",\n              code_postal: \"col\", ville: \"col\", adresse_complete: \"col\"}\n}","operationId":"save_ct0_mapping_api_schema_ct0_mapping__upload_id__post","parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","title":"Upload Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schema/flash/{upload_id}":{"get":{"tags":["Schema Validation","Schema Validation"],"summary":"Flash Diagnostic","description":"CT0 Diagnostic Flash — L1 + L3 SIRENE, 19 critères, grade A–D, money_leak €.\nRetourne un PDF 1 page si WeasyPrint disponible, sinon HTML.","operationId":"flash_diagnostic_api_schema_flash__upload_id__get","parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","title":"Upload Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schema/flash/{upload_id}/view-data":{"get":{"tags":["Schema Validation","Schema Validation"],"summary":"Flash View Data","description":"Vue en ligne du CT Flash anonyme (viewer /rapport.html?flash=...). Sert les\nagrégats du diagnostic (jamais le fichier ni les lignes brutes). Mêmes\ncontrôles que /flash/{upload_id} : token valide + client_id concordant.","operationId":"flash_view_data_api_schema_flash__upload_id__view_data_get","parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","title":"Upload Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schema/flash-progress/{upload_id}":{"get":{"tags":["Schema Validation","Schema Validation"],"summary":"Flash Progress","description":"Progression réelle du traitement CT0 en cours (done/total par lot\nBAN/Décès) — pollée par le front pendant que /flash/{upload_id} est\nencore en vol. Best-effort : fichier absent ou vide → {} (le front\nretombe alors sur son estimation par volumétrie/temps écoulé).","operationId":"flash_progress_api_schema_flash_progress__upload_id__get","parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","title":"Upload Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schema/report/ratings":{"get":{"tags":["Schema Validation","Schema Validation"],"summary":"Get Report Ratings","description":"Retourne les dernières notes de rapport pour le client authentifié.","operationId":"get_report_ratings_api_schema_report_ratings_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schema/job/{job_id}/status":{"get":{"tags":["Schema Validation","Schema Validation"],"summary":"Job Status","description":"Polling endpoint pour les jobs en queue (gros fichiers).\nRetourne status, progress_pct, message et result_url quand done.","operationId":"job_status_api_schema_job__job_id__status_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/internal/download-file":{"get":{"tags":["Internal VPS-1"],"summary":"Download File Internal","operationId":"download_file_internal_api_internal_download_file_get","parameters":[{"name":"user_id","in":"query","required":true,"schema":{"type":"integer","description":"ID de l'utilisateur","title":"User Id"},"description":"ID de l'utilisateur"},{"name":"X-Internal-Secret","in":"header","required":true,"schema":{"type":"string","title":"X-Internal-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/internal/download-upload":{"get":{"tags":["Internal VPS-1"],"summary":"Download Upload Internal","operationId":"download_upload_internal_api_internal_download_upload_get","parameters":[{"name":"upload_id","in":"query","required":true,"schema":{"type":"string","description":"ID de l'upload (upl_xxx)","title":"Upload Id"},"description":"ID de l'upload (upl_xxx)"},{"name":"X-Internal-Secret","in":"header","required":true,"schema":{"type":"string","title":"X-Internal-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/internal/user-id-by-email":{"get":{"tags":["Internal VPS-1"],"summary":"User Id By Email Internal","operationId":"user_id_by_email_internal_api_internal_user_id_by_email_get","parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","description":"Email du client","title":"Email"},"description":"Email du client"},{"name":"X-Internal-Secret","in":"header","required":true,"schema":{"type":"string","title":"X-Internal-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/internal/status-update":{"post":{"tags":["Internal VPS-1"],"summary":"Status Update Internal","operationId":"status_update_internal_api_internal_status_update_post","parameters":[{"name":"X-Internal-Secret","in":"header","required":true,"schema":{"type":"string","title":"X-Internal-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusUpdatePayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/internal/pipeline-callback":{"post":{"tags":["Internal VPS-1"],"summary":"Pipeline Callback","description":"Reçoit les callbacks du pipeline DRE (VPS-1).\nAuthentification par HMAC-SHA256 sur le corps de la requête.\nMet à jour le dossier et logue la transition si pertinent.","operationId":"pipeline_callback_api_internal_pipeline_callback_post","parameters":[{"name":"X-Signature","in":"header","required":true,"schema":{"type":"string","title":"X-Signature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/internal/capabilities":{"get":{"tags":["Internal VPS-1"],"summary":"Get Capabilities Internal","description":"Retourne les capacités activées pour une offre donnée.\nVPS-1 appelle cet endpoint en début de job pour savoir si BAN/Décès/Mistral sont actifs.","operationId":"get_capabilities_internal_api_internal_capabilities_get","parameters":[{"name":"produit","in":"query","required":true,"schema":{"type":"string","description":"Offre : ct0 | ct1 | ct2 | ct3","title":"Produit"},"description":"Offre : ct0 | ct1 | ct2 | ct3"},{"name":"X-Internal-Secret","in":"header","required":true,"schema":{"type":"string","title":"X-Internal-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/internal/l0-learning-export":{"get":{"tags":["Internal VPS-1"],"summary":"L0 Learning Export","description":"Exporte les lignes d'apprentissage L0 modifiées depuis `since`.\n\nLecture seule, en mode `ro` sur le SQLite : ne peut ni verrouiller ni\naltérer la base de VPS-3. Réponse : {table: [ligne, ...]} plus le\nfiligrane le plus récent rencontré, que VPS-1 renvoie au tour suivant.","operationId":"l0_learning_export_api_internal_l0_learning_export_get","parameters":[{"name":"since","in":"query","required":false,"schema":{"type":"string","description":"Filigrane ISO 8601 ; vide = tout","default":"","title":"Since"},"description":"Filigrane ISO 8601 ; vide = tout"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":5000,"title":"Limit"}},{"name":"X-Internal-Secret","in":"header","required":true,"schema":{"type":"string","title":"X-Internal-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/messages":{"get":{"tags":["Messagerie"],"summary":"List Messages Client","description":"Liste tous les messages du dossier de l'utilisateur connecté.","operationId":"list_messages_client_api_messages_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/MessageOut"},"type":"array","title":"Response List Messages Client Api Messages Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["Messagerie"],"summary":"Send Message Client","description":"Le client envoie un message à l'équipe Dataroia.","operationId":"send_message_client_api_messages_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/messages/{message_id}/read":{"patch":{"tags":["Messagerie"],"summary":"Mark Message Read","description":"Marque un message comme lu (uniquement les messages reçus par le client).","operationId":"mark_message_read_api_messages__message_id__read_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"integer","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/messages/{message_id}/read":{"patch":{"tags":["Messagerie"],"summary":"Admin Mark Message Read","description":"Admin : marque un message client comme lu (utilisé par le pilotage).","operationId":"admin_mark_message_read_api_admin_messages__message_id__read_patch","parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"integer","title":"Message Id"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/messages":{"get":{"tags":["Messagerie"],"summary":"List Messages Admin","description":"Admin : liste les messages d'un dossier client (filtré par email).","operationId":"list_messages_admin_api_admin_messages_get","parameters":[{"name":"user_email","in":"query","required":true,"schema":{"type":"string","title":"User Email"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MessageOut"},"title":"Response List Messages Admin Api Admin Messages Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Messagerie"],"summary":"Send Message Admin","description":"Admin : envoie un message dans le dossier d'un client.","operationId":"send_message_admin_api_admin_messages_post","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminMessageCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/statuts":{"get":{"tags":["Statuts"],"summary":"Get Statuts Client","description":"Retourne l'historique complet des transitions de statut du dossier connecté.","operationId":"get_statuts_client_api_statuts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/StatusHistoryOut"},"type":"array","title":"Response Get Statuts Client Api Statuts Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/admin/statuts":{"get":{"tags":["Statuts"],"summary":"Get Statuts Admin","description":"Admin : retourne l'historique complet des statuts d'un dossier client.","operationId":"get_statuts_admin_api_admin_statuts_get","parameters":[{"name":"user_email","in":"query","required":true,"schema":{"type":"string","description":"Email du client","title":"User Email"},"description":"Email du client"},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StatusHistoryOut"},"title":"Response Get Statuts Admin Api Admin Statuts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/relances/mapping":{"post":{"tags":["Statuts"],"summary":"Relance Mapping","description":"Déclenche manuellement un email de relance mapping (J+2) vers le client.","operationId":"relance_mapping_api_admin_relances_mapping_post","parameters":[{"name":"user_email","in":"query","required":true,"schema":{"type":"string","description":"Email du client à relancer","title":"User Email"},"description":"Email du client à relancer"},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/relances/inactif":{"post":{"tags":["Statuts"],"summary":"Relance Inactif","description":"Déclenche manuellement un email de relance inactif (J+30) vers le client.","operationId":"relance_inactif_api_admin_relances_inactif_post","parameters":[{"name":"user_email","in":"query","required":true,"schema":{"type":"string","description":"Email du client à relancer","title":"User Email"},"description":"Email du client à relancer"},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/biz-rules/pending":{"get":{"tags":["BIZ Rules Admin"],"summary":"Get Pending Rules","description":"Retourne toutes les règles en attente de validation admin.\nSi client_id fourni → filtre sur ce client.\nUtilisé par la section BIZ Rules de dataroia-pilotage.html.","operationId":"get_pending_rules_admin_biz_rules_pending_get","parameters":[{"name":"client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtrer sur un client","title":"Client Id"},"description":"Filtrer sur un client"},{"name":"admin_token","in":"query","required":true,"schema":{"type":"string","description":"Clé admin","title":"Admin Token"},"description":"Clé admin"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/biz-rules/stats":{"get":{"tags":["BIZ Rules Admin"],"summary":"Get Pending Stats","description":"Stats globales des règles en attente.\nUtilisé par le dashboard admin pour le badge d'alerte.","operationId":"get_pending_stats_admin_biz_rules_stats_get","parameters":[{"name":"admin_token","in":"query","required":true,"schema":{"type":"string","description":"Clé admin","title":"Admin Token"},"description":"Clé admin"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/biz-rules/validate/{rule_id}":{"post":{"tags":["BIZ Rules Admin"],"summary":"Validate Rule","description":"Active une règle après validation admin.\npending → active","operationId":"validate_rule_admin_biz_rules_validate__rule_id__post","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"admin_note","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Note"}},{"name":"admin_token","in":"query","required":true,"schema":{"type":"string","description":"Clé admin","title":"Admin Token"},"description":"Clé admin"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/biz-rules/validate/bulk":{"post":{"tags":["BIZ Rules Admin"],"summary":"Validate Bulk","description":"Valide plusieurs règles en une fois.","operationId":"validate_bulk_admin_biz_rules_validate_bulk_post","parameters":[{"name":"admin_token","in":"query","required":true,"schema":{"type":"string","description":"Clé admin","title":"Admin Token"},"description":"Clé admin"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkValidateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/biz-rules/reject/{rule_id}":{"post":{"tags":["BIZ Rules Admin"],"summary":"Reject Rule","description":"Rejette une règle avec motif obligatoire.\npending → rejected","operationId":"reject_rule_admin_biz_rules_reject__rule_id__post","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"admin_token","in":"query","required":true,"schema":{"type":"string","description":"Clé admin","title":"Admin Token"},"description":"Clé admin"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RejectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/biz-rules/history/{client_id}":{"get":{"tags":["BIZ Rules Admin"],"summary":"Get Rules History","description":"Historique complet des règles d'un client.","operationId":"get_rules_history_admin_biz_rules_history__client_id__get","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"include_rejected","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Rejected"}},{"name":"admin_token","in":"query","required":true,"schema":{"type":"string","description":"Clé admin","title":"Admin Token"},"description":"Clé admin"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/biz-rules/active/{client_id}":{"get":{"tags":["BIZ Rules Admin"],"summary":"Get Active Rules","description":"Règles actives d'un client.\nUtile pour vérifier ce qui est appliqué.","operationId":"get_active_rules_admin_biz_rules_active__client_id__get","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"entity_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"}},{"name":"admin_token","in":"query","required":true,"schema":{"type":"string","description":"Clé admin","title":"Admin Token"},"description":"Clé admin"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/client/biz-rules/submit":{"post":{"tags":["BIZ Rules Client"],"summary":"Submit Client Rules","description":"Le client soumet ses propres règles métier depuis l'espace client.\nSauvegardées avec source=\"client\" et statut=\"pending\".\nNotification admin automatique.","operationId":"submit_client_rules_client_biz_rules_submit_post","parameters":[{"name":"client_id","in":"query","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientRulesSubmit"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/client/biz-rules/questions/{upload_id}":{"get":{"tags":["BIZ Rules Client"],"summary":"Get Client Questions","description":"Retourne les questions générées par Mistral sur les patterns incertains.\nAffiché dans la page de validation mapping.","operationId":"get_client_questions_client_biz_rules_questions__upload_id__get","parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","title":"Upload Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/client/biz-rules/answers/{upload_id}":{"post":{"tags":["BIZ Rules Client"],"summary":"Submit Answers","description":"Le client répond aux questions sur ses patterns incertains.\nLes réponses sont converties en règles BIZ pending.","operationId":"submit_answers_client_biz_rules_answers__upload_id__post","parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","title":"Upload Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientAnswers"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/client/biz-rules/active/{client_id}":{"get":{"tags":["BIZ Rules Client"],"summary":"Get My Active Rules","description":"Retourne les règles actives du client pour l'onglet Mon Mapping.\nVersion simplifiée — sans détails techniques.","operationId":"get_my_active_rules_client_biz_rules_active__client_id__get","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/repair-manifest/{user_id}":{"post":{"tags":["Rapport Config"],"summary":"Repair Manifest","description":"Reconstruit le manifest et met à jour dossier.rapport_path\nen se basant sur les dernières entrées RapportHistory.\nÀ utiliser quand l'étape 4 sert un rapport périmé après un double-run.","operationId":"repair_manifest_api_admin_repair_manifest__user_id__post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/rapport-config":{"get":{"tags":["Rapport Config"],"summary":"Get Rapport Config","operationId":"get_rapport_config_api_admin_rapport_config_get","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Rapport Config"],"summary":"Update Rapport Config","operationId":"update_rapport_config_api_admin_rapport_config_patch","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RapportConfigUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/platform-settings":{"get":{"tags":["Rapport Config"],"summary":"Get Platform Settings","operationId":"get_platform_settings_api_admin_platform_settings_get","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Rapport Config"],"summary":"Update Platform Settings","operationId":"update_platform_settings_api_admin_platform_settings_patch","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformSettingsPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/platform-settings/public":{"get":{"tags":["Rapport Config"],"summary":"Get Platform Settings Public","description":"Endpoint public (JWT non requis) — retourne uniquement max_lignes_zip.","operationId":"get_platform_settings_public_api_platform_settings_public_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/internal/fichier-redresse":{"post":{"tags":["Rapport Config"],"summary":"Internal Fichier Redresse","description":"Reçoit le ZIP des CSV redressés (un par entité) généré par le pipeline\nDRE sur VPS-1. Stocké à côté des rapports PDF du client ; servi ensuite\npar GET /api/fichiers/fichier-redresse (auth client).","operationId":"internal_fichier_redresse_api_internal_fichier_redresse_post","parameters":[{"name":"X-Internal-Secret","in":"header","required":true,"schema":{"type":"string","title":"X-Internal-Secret"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_internal_fichier_redresse_api_internal_fichier_redresse_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/internal/generate-rapport":{"post":{"tags":["Rapport Config"],"summary":"Internal Generate Rapport","operationId":"internal_generate_rapport_api_internal_generate_rapport_post","parameters":[{"name":"X-Internal-Secret","in":"header","required":true,"schema":{"type":"string","title":"X-Internal-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateRapportPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/rapport/generate/{user_id}":{"post":{"tags":["Rapport Config"],"summary":"Admin Generate Rapport","operationId":"admin_generate_rapport_api_admin_rapport_generate__user_id__post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminGeneratePayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rapports":{"get":{"tags":["Rapports"],"summary":"List Rapports","description":"Retourne les 5 derniers rapports par code CT pour le client connecté.\nFormat : liste plate avec ct_code, date+heure, nom — max 20 entrées (5 × 4 CT).\nLes rapports sans ct_code (anciens) sont retournés dans un groupe séparé (max 5).","operationId":"list_rapports_api_rapports_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/rapports/{rapport_id}/download":{"get":{"tags":["Rapports"],"summary":"Download Rapport By Id","description":"Télécharge un rapport historique par son ID (sécurisé : vérification user_id).","operationId":"download_rapport_by_id_api_rapports__rapport_id__download_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"rapport_id","in":"path","required":true,"schema":{"type":"integer","title":"Rapport Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rapports/{rapport_id}/data":{"get":{"tags":["Rapports"],"summary":"Rapport Data By Id","description":"Retourne le contexte JSON du rapport (sidecar généré à côté du PDF) pour le\nviewer dynamique /rapport.html. Sécurisé : vérification user_id, comme le download.","operationId":"rapport_data_by_id_api_rapports__rapport_id__data_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"rapport_id","in":"path","required":true,"schema":{"type":"integer","title":"Rapport Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/clients":{"get":{"tags":["Admin Clients"],"summary":"List Clients","description":"Liste tous les utilisateurs avec leur dossier et le nombre de messages non lus.","operationId":"list_clients_api_admin_clients_get","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/clients/{user_id}/status":{"patch":{"tags":["Admin Clients"],"summary":"Update Client Status","description":"Met à jour le statut du dossier d'un client et journalise la transition.","operationId":"update_client_status_api_admin_clients__user_id__status_patch","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/clients/{user_id}/notes":{"patch":{"tags":["Admin Clients"],"summary":"Update Notes","description":"Sauvegarde les notes internes d'un dossier client.","operationId":"update_notes_api_admin_clients__user_id__notes_patch","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/clients/{user_id}/flags":{"patch":{"tags":["Admin Clients"],"summary":"Update Client Flags","description":"Active/désactive les droits admin et/ou l'accès bêta d'un utilisateur.\nbody : { \"is_admin\": true, \"is_beta\": false }  (clés optionnelles, merge partiel)","operationId":"update_client_flags_api_admin_clients__user_id__flags_patch","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/clients/{user_id}/produit":{"patch":{"tags":["Admin Clients"],"summary":"Admin Set Produit","description":"Définit l'offre (CT0/CT1/CT2/CT3) d'un client beta sans passer par Stripe.\nbody : { \"produit\": \"ct1\" }  ou  { \"produits\": [\"ct1\", \"ct2\"] }","operationId":"admin_set_produit_api_admin_clients__user_id__produit_patch","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/mappy/generate-link":{"post":{"tags":["Admin Clients"],"summary":"Admin Generate Mappy Link","description":"Génère un lien Mappy beta pré-signé (Mappy v2 multi-fichiers).\nbody : { \"client_email\": \"...\", \"ttl_days\": 7 }\nRetourne : { \"link\", \"session_id\", \"expires_at\", \"client_email\" }","operationId":"admin_generate_mappy_link_api_admin_mappy_generate_link_post","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/beta/links":{"post":{"tags":["Admin Clients"],"summary":"Admin Generate Beta Links","description":"Génère 2 liens pré-signés pour un client beta :\n  - ct0_link  → Mappy v2 configuré CT0 Flash (1 fichier, rapport flash)\n  - mappy_link → Mappy v2 complet (multi-fichiers, rapport complet)\n\nbody : { \"client_email\": \"...\", \"ttl_days\": 7 }\n\nRetourne :\n  { ct0_link, ct0_session_id, mappy_link, mappy_session_id, expires_at, client_email }","operationId":"admin_generate_beta_links_api_admin_beta_links_post","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devis/request":{"post":{"tags":["Devis"],"summary":"Create Devis Request","description":"Le client soumet une demande de devis quand son volume ZIP dépasse le seuil.\nDéclenche une notification email admin.","operationId":"create_devis_request_api_devis_request_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevisRequestIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/devis/mine":{"get":{"tags":["Devis"],"summary":"List My Devis","operationId":"list_my_devis_api_devis_mine_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/devis/{devis_id}/accepter":{"post":{"tags":["Devis"],"summary":"Accepter Devis","operationId":"accepter_devis_api_devis__devis_id__accepter_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"devis_id","in":"path","required":true,"schema":{"type":"integer","title":"Devis Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devis/{devis_id}/refuser":{"post":{"tags":["Devis"],"summary":"Refuser Devis","operationId":"refuser_devis_api_devis__devis_id__refuser_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"devis_id","in":"path","required":true,"schema":{"type":"integer","title":"Devis Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevisRefuserIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/devis":{"get":{"tags":["Devis"],"summary":"List Devis","operationId":"list_devis_api_admin_devis_get","parameters":[{"name":"X-Admin-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/devis/{devis_id}/status":{"patch":{"tags":["Devis"],"summary":"Update Devis Status","operationId":"update_devis_status_api_admin_devis__devis_id__status_patch","parameters":[{"name":"devis_id","in":"path","required":true,"schema":{"type":"integer","title":"Devis Id"}},{"name":"X-Admin-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevisStatusPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/devis/{devis_id}/valider":{"post":{"tags":["Devis"],"summary":"Valider Devis","description":"Construit le devis détaillé (lignes de prestation) et l'envoie au client.\nPasse le statut à \"envoye\". Le lien Stripe n'est créé que lorsque le client\naccepte le devis (voir POST /api/devis/{id}/accepter).","operationId":"valider_devis_api_admin_devis__devis_id__valider_post","parameters":[{"name":"devis_id","in":"path","required":true,"schema":{"type":"integer","title":"Devis Id"}},{"name":"X-Admin-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevisValiderIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/documents/mine":{"get":{"tags":["Documents"],"summary":"List My Documents","operationId":"list_my_documents_api_documents_mine_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/documents/{doc_id}/download":{"get":{"tags":["Documents"],"summary":"Download My Document","operationId":"download_my_document_api_documents__doc_id__download_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"integer","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/documents":{"get":{"tags":["Documents"],"summary":"List Documents","operationId":"list_documents_api_admin_documents_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"ct_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ct Code"}},{"name":"client","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date To"}},{"name":"X-Admin-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/documents/{doc_id}/download":{"get":{"tags":["Documents"],"summary":"Admin Download Document","operationId":"admin_download_document_api_admin_documents__doc_id__download_get","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"integer","title":"Doc Id"}},{"name":"X-Admin-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services/restart/vps3":{"post":{"tags":["Services Health"],"summary":"Restart Vps3","description":"Redémarre dataroia-api sur VPS-3 (fire-and-forget via systemd).","operationId":"restart_vps3_api_admin_services_restart_vps3_post","parameters":[{"name":"X-Admin-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services/restart/vps1":{"post":{"tags":["Services Health"],"summary":"Restart Vps1","description":"Demande à VPS-1 de redémarrer dataroia-dre + dataroia-intake via WireGuard.","operationId":"restart_vps1_api_admin_services_restart_vps1_post","parameters":[{"name":"X-Admin-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services/health":{"get":{"tags":["Services Health"],"summary":"Services Health","operationId":"services_health_api_admin_services_health_get","parameters":[{"name":"X-Admin-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/offres":{"get":{"tags":["Stripe"],"summary":"Get Offres","description":"Retourne les offres actives avec prix unique par segment (None = sur devis).\nUtilisé par la page tarifs et l'espace client.","operationId":"get_offres_api_offres_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/stripe/checkout":{"post":{"tags":["Stripe"],"summary":"Stripe Checkout","description":"Crée une Stripe Checkout Session (CT0 inclus) et retourne l'URL, coupon optionnel.","operationId":"stripe_checkout_api_stripe_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/stripe/webhook":{"post":{"tags":["Stripe"],"summary":"Stripe Webhook","operationId":"stripe_webhook_api_stripe_webhook_post","parameters":[{"name":"stripe-signature","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe-Signature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/stripe/offres":{"get":{"tags":["Stripe Admin"],"summary":"List Offres","operationId":"list_offres_api_admin_stripe_offres_get","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/stripe/offres/{ct_code}":{"patch":{"tags":["Stripe Admin"],"summary":"Patch Offre","operationId":"patch_offre_api_admin_stripe_offres__ct_code__patch","parameters":[{"name":"ct_code","in":"path","required":true,"schema":{"type":"string","title":"Ct Code"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OffrePatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/stripe/offres/{ct_code}/prix/{user_id}":{"get":{"tags":["Stripe Admin"],"summary":"Get Prix Suggere","description":"Retourne le prix suggéré pour un client donné\nen fonction de son segment (déduit du profile_json du dossier).","operationId":"get_prix_suggere_api_admin_stripe_offres__ct_code__prix__user_id__get","parameters":[{"name":"ct_code","in":"path","required":true,"schema":{"type":"string","title":"Ct Code"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/stripe/coupons":{"get":{"tags":["Stripe Admin"],"summary":"List Coupons","operationId":"list_coupons_api_admin_stripe_coupons_get","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Stripe Admin"],"summary":"Create Coupon","operationId":"create_coupon_api_admin_stripe_coupons_post","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CouponCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/stripe/coupons/{coupon_id}/toggle":{"patch":{"tags":["Stripe Admin"],"summary":"Toggle Coupon","operationId":"toggle_coupon_api_admin_stripe_coupons__coupon_id__toggle_patch","parameters":[{"name":"coupon_id","in":"path","required":true,"schema":{"type":"integer","title":"Coupon Id"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/stripe/paiements":{"get":{"tags":["Stripe Admin"],"summary":"List Paiements","operationId":"list_paiements_api_admin_stripe_paiements_get","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/stripe/paiements/{user_id}/lien":{"post":{"tags":["Stripe Admin"],"summary":"Generer Lien Paiement","description":"Génère un Stripe Payment Link pour un client.\nL'admin saisit le montant exact (en €) après avoir consulté la fourchette suggérée.","operationId":"generer_lien_paiement_api_admin_stripe_paiements__user_id__lien_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaiementLienCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/stripe/paiements/{paiement_id}/statut":{"patch":{"tags":["Stripe Admin"],"summary":"Patch Paiement Statut","operationId":"patch_paiement_statut_api_admin_stripe_paiements__paiement_id__statut_patch","parameters":[{"name":"paiement_id","in":"path","required":true,"schema":{"type":"integer","title":"Paiement Id"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaiementStatutPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/stripe/paiements/{paiement_id}/remboursement":{"post":{"tags":["Stripe Admin"],"summary":"Rembourser Paiement","description":"Rembourse un paiement (Stripe best-effort) et génère automatiquement l'avoir\nPDF correspondant, envoyé au client par email.","operationId":"rembourser_paiement_api_admin_stripe_paiements__paiement_id__remboursement_post","parameters":[{"name":"paiement_id","in":"path","required":true,"schema":{"type":"integer","title":"Paiement Id"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemboursementCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/purge/preview":{"get":{"tags":["Admin Purge"],"summary":"Purge Preview","description":"Retourne le nombre d'éléments et la taille totale qui seraient supprimés,\nSANS effectuer aucune suppression.","operationId":"purge_preview_api_admin_purge_preview_get","parameters":[{"name":"type","in":"query","required":true,"schema":{"type":"string","description":"fichiers | rapports","title":"Type"},"description":"fichiers | rapports"},{"name":"before_date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Date limite incluse (YYYY-MM-DD)","title":"Before Date"},"description":"Date limite incluse (YYYY-MM-DD)"},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/purge/fichiers":{"post":{"tags":["Admin Purge"],"summary":"Purge Fichiers","description":"Supprime physiquement les fichiers CRM déposés par les clients\njusqu'à before_date (inclus) et efface les références en base.\n\nCorps : { \"before_date\": \"YYYY-MM-DD\" }","operationId":"purge_fichiers_api_admin_purge_fichiers_post","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/purge/rapports":{"post":{"tags":["Admin Purge"],"summary":"Purge Rapports","description":"Supprime physiquement les rapports PDF livrés jusqu'à before_date (inclus).\n- Supprime tout le contenu du dossier rapports/ de chaque user concerné\n- Supprime les entrées RapportHistory correspondantes\n- Efface rapport_path / rapport_name dans Dossier si concerné\n\nCorps : { \"before_date\": \"YYYY-MM-DD\" }","operationId":"purge_rapports_api_admin_purge_rapports_post","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/purge/sessions":{"post":{"tags":["Admin Purge"],"summary":"Purge Sessions","description":"Supprime les répertoires de session temporaire dans /data/crm-files/_temp/\net /data/crm-files/_mappy_sessions/ plus anciens que before_date (mtime).\n\nCes dossiers contiennent les CSV/ZIP uploadés via les flows CT0, schema\nvalidation et Mappy — invisibles pour la purge \"fichiers\" car non\nréférencés dans Dossier.file_path.\n\nCorps : { \"before_date\": \"YYYY-MM-DD\" }","operationId":"purge_sessions_api_admin_purge_sessions_post","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/referentiels/status":{"get":{"tags":["Admin Référentiels"],"summary":"Referentiels Status","operationId":"referentiels_status_api_admin_referentiels_status_get","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Referentiels Status Api Admin Referentiels Status Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/referentiels/update/{referentiel}":{"post":{"tags":["Admin Référentiels"],"summary":"Referentiel Update","operationId":"referentiel_update_api_admin_referentiels_update__referentiel__post","parameters":[{"name":"referentiel","in":"path","required":true,"schema":{"type":"string","title":"Referentiel"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Referentiel Update Api Admin Referentiels Update  Referentiel  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/config/capabilities":{"get":{"tags":["Admin Capacités"],"summary":"Get Capabilities","operationId":"get_capabilities_api_admin_config_capabilities_get","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Admin Capacités"],"summary":"Patch Capabilities","description":"body : { \"ct0\": {\"run_ban\": true}, \"ct1\": {\"run_deces\": true} }\nMerge partiel — seules les clés présentes sont mises à jour.","operationId":"patch_capabilities_api_admin_config_capabilities_patch","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/apikeys":{"get":{"tags":["Admin Clés API"],"summary":"List Apikeys","operationId":"list_apikeys_api_admin_apikeys_get","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin Clés API"],"summary":"Create Apikey","operationId":"create_apikey_api_admin_apikeys_post","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKeyRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/apikeys/{api_key}/toggle":{"patch":{"tags":["Admin Clés API"],"summary":"Toggle Apikey","operationId":"toggle_apikey_api_admin_apikeys__api_key__toggle_patch","parameters":[{"name":"api_key","in":"path","required":true,"schema":{"type":"string","title":"Api Key"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToggleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/apikeys/{api_key}/plan":{"patch":{"tags":["Admin Clés API"],"summary":"Change Plan","operationId":"change_plan_api_admin_apikeys__api_key__plan_patch","parameters":[{"name":"api_key","in":"path","required":true,"schema":{"type":"string","title":"Api Key"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/apikeys/{api_key}/daily":{"patch":{"tags":["Admin Clés API"],"summary":"Set Daily Quota","operationId":"set_daily_quota_api_admin_apikeys__api_key__daily_patch","parameters":[{"name":"api_key","in":"path","required":true,"schema":{"type":"string","title":"Api Key"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DailyQuotaRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/apikeys/{api_key}/reset":{"post":{"tags":["Admin Clés API"],"summary":"Reset Apikey Quota","operationId":"reset_apikey_quota_api_admin_apikeys__api_key__reset_post","parameters":[{"name":"api_key","in":"path","required":true,"schema":{"type":"string","title":"Api Key"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/apikeys/{api_key}":{"delete":{"tags":["Admin Clés API"],"summary":"Delete Apikey","operationId":"delete_apikey_api_admin_apikeys__api_key__delete","parameters":[{"name":"api_key","in":"path","required":true,"schema":{"type":"string","title":"Api Key"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/expert/ask":{"post":{"tags":["ExpertROIA"],"summary":"Expert Ask","operationId":"expert_ask_api_expert_ask_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AskRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/expert/feedback":{"post":{"tags":["ExpertROIA"],"summary":"Expert Feedback","operationId":"expert_feedback_api_expert_feedback_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/admin/expert/feedback/stats":{"get":{"tags":["ExpertROIA"],"summary":"Admin Feedback Stats","operationId":"admin_feedback_stats_api_admin_expert_feedback_stats_get","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/siret/dirigeants":{"post":{"tags":["Landing SIRET"],"summary":"Dirigeants Bulk","description":"Pour une liste de SIREN, retourne les dirigeants actifs (RNE local) + cross décès.\nFormat de sortie : { results: { siren: [dirigeant, ...] } }\nChaque dirigeant : type (individu | ei | entreprise), nom, prenoms, denomination,\nsiren_dirigeant, role, annee_naissance, decede, statut_vital, date_deces, score.","operationId":"dirigeants_bulk_api_siret_dirigeants_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DirigeantsBulkRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/siret/dirigeants-check":{"post":{"tags":["Landing SIRET"],"summary":"Dirigeants Check","description":"Vérifie si les dirigeants sont décédés (registre INSEE décès via Trust API).\nAppelé depuis la landing après fetch de l'API Annuaire des Entreprises.","operationId":"dirigeants_check_api_siret_dirigeants_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DirigeantCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/siret/check":{"post":{"tags":["Landing SIRET"],"summary":"Siret Check","operationId":"siret_check_api_siret_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/siret/lead":{"post":{"tags":["Landing SIRET"],"summary":"Siret Lead","operationId":"siret_lead_api_siret_lead_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/livredor/submit":{"post":{"tags":["Livre d'or"],"summary":"Livredor Submit","operationId":"livredor_submit_api_livredor_submit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewSubmit"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/livredor/public":{"get":{"tags":["Livre d'or"],"summary":"Livredor Public","operationId":"livredor_public_api_livredor_public_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/livredor/admin/list":{"get":{"tags":["Livre d'or"],"summary":"Livredor Admin List","operationId":"livredor_admin_list_api_livredor_admin_list_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Status"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/livredor/admin/{review_id}/action":{"post":{"tags":["Livre d'or"],"summary":"Livredor Admin Action","operationId":"livredor_admin_action_api_livredor_admin__review_id__action_post","parameters":[{"name":"review_id","in":"path","required":true,"schema":{"type":"integer","title":"Review Id"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminAction"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/livredor/admin/{review_id}":{"patch":{"tags":["Livre d'or"],"summary":"Livredor Admin Edit","operationId":"livredor_admin_edit_api_livredor_admin__review_id__patch","parameters":[{"name":"review_id","in":"path","required":true,"schema":{"type":"integer","title":"Review Id"}},{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminEdit"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/leads/gate-unlock":{"post":{"tags":["Leads"],"summary":"Gate Unlock","operationId":"gate_unlock_api_leads_gate_unlock_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GateUnlockRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dirigeants/check":{"post":{"tags":["API Dirigeants"],"summary":"Dirigeants Check","operationId":"dirigeants_check_api_v1_dirigeants_check_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DirigeantsCheckRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/enrich/health":{"get":{"tags":["Connecteurs CRM"],"summary":"Enrich Health","description":"Ping non authentifié — utilisé par Make pour valider l'URL de base.","operationId":"enrich_health_api_v1_enrich_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/enrich":{"post":{"tags":["Connecteurs CRM"],"summary":"Enrich","operationId":"enrich_api_v1_enrich_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/connectors":{"get":{"tags":["Connecteurs CRM — guides"],"summary":"Connectors Manifest","description":"Liste des fichiers téléchargeables par connecteur.","operationId":"connectors_manifest_api_v1_connectors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/connectors/files/{filename}":{"get":{"tags":["Connecteurs CRM — guides"],"summary":"Connector File","description":"Télécharge un artefact de connecteur (liste blanche, pas de traversée).","operationId":"connector_file_api_v1_connectors_files__filename__get","parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/deces/health":{"get":{"tags":["API Décès"],"summary":"Deces Health","description":"Ping non authentifié.","operationId":"deces_health_api_v1_deces_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/deces":{"post":{"tags":["API Décès"],"summary":"Deces","operationId":"deces_api_v1_deces_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/catalogue":{"get":{"tags":["Facturation API"],"summary":"Catalogue","description":"Grille publique des prix API (source : billing_config.py).","operationId":"catalogue_api_v1_billing_catalogue_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/billing/balance":{"get":{"tags":["Facturation API"],"summary":"Balance","description":"Conso mensuelle restante + solde de crédits prépayés.","operationId":"balance_api_v1_billing_balance_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/subscribe":{"post":{"tags":["Facturation API"],"summary":"Subscribe","description":"Crée une session Checkout d'abonnement mensuel (Starter / Business).","operationId":"subscribe_api_v1_billing_subscribe_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscribeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/credits":{"post":{"tags":["Facturation API"],"summary":"Buy Credits","description":"Crée une session Checkout one-shot pour un pack de crédits (dépassement).","operationId":"buy_credits_api_v1_billing_credits_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/keys/signup":{"post":{"tags":["Signup clé API"],"summary":"Signup","operationId":"signup_api_v1_keys_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tva/{siren}":{"get":{"tags":["Vérifications gratuites"],"summary":"Tva From Siren","operationId":"tva_from_siren_api_v1_tva__siren__get","parameters":[{"name":"siren","in":"path","required":true,"schema":{"type":"string","title":"Siren"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/adresse/normaliser":{"post":{"tags":["Vérifications gratuites"],"summary":"Normaliser Adresses","operationId":"normaliser_adresses_api_v1_adresse_normaliser_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdresseRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ext/verify":{"post":{"tags":["Extension navigateur"],"summary":"Ext Verify","operationId":"ext_verify_api_v1_ext_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sante/health":{"get":{"tags":["API Santé"],"summary":"Sante Health","description":"Ping non authentifié.","operationId":"sante_health_api_v1_sante_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sante/check":{"post":{"tags":["API Santé"],"summary":"Sante Check","operationId":"sante_check_api_v1_sante_check_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SanteCheckRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/surveillance/health":{"get":{"tags":["API Surveillance"],"summary":"Surveillance Health","description":"Ping non authentifié.","operationId":"surveillance_health_api_v1_surveillance_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/surveillance/portefeuille":{"get":{"tags":["API Surveillance"],"summary":"Get Portefeuille","operationId":"get_portefeuille_api_v1_surveillance_portefeuille_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["API Surveillance"],"summary":"Modifier Portefeuille","operationId":"modifier_portefeuille_api_v1_surveillance_portefeuille_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortefeuilleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/surveillance/alertes":{"get":{"tags":["API Surveillance"],"summary":"Get Alertes","operationId":"get_alertes_api_v1_surveillance_alertes_get","parameters":[{"name":"non_lues","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Non Lues"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/surveillance/alertes/lues":{"post":{"tags":["API Surveillance"],"summary":"Alertes Lues","operationId":"alertes_lues_api_v1_surveillance_alertes_lues_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertesLuesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/surveillance/run":{"post":{"tags":["API Surveillance"],"summary":"Surveillance Run","description":"Cycle de détection global — déclenché par l'admin ou un timer systemd.","operationId":"surveillance_run_api_v1_surveillance_run_post","parameters":[{"name":"X-Admin-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"tags":["Infra"],"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AdminAction":{"properties":{"action":{"type":"string","enum":["approve","reject","delete"],"title":"Action"}},"type":"object","required":["action"],"title":"AdminAction"},"AdminEdit":{"properties":{"nom":{"anyOf":[{"type":"string","maxLength":80,"minLength":2},{"type":"null"}],"title":"Nom"},"entreprise":{"anyOf":[{"type":"string","maxLength":120,"minLength":2},{"type":"null"}],"title":"Entreprise"},"role":{"anyOf":[{"type":"string","maxLength":80,"minLength":2},{"type":"null"}],"title":"Role"},"secteur":{"anyOf":[{"type":"string","maxLength":80,"minLength":2},{"type":"null"}],"title":"Secteur"},"note":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Note"},"commentaire":{"anyOf":[{"type":"string","maxLength":1200,"minLength":20},{"type":"null"}],"title":"Commentaire"}},"type":"object","title":"AdminEdit"},"AdminGeneratePayload":{"properties":{"report_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Report Type"},"client_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Client Data"},"audit_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Audit Data"},"quality_reports":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Quality Reports"},"cross_kpis":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Cross Kpis"},"client_context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Client Context"},"previous_scores":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Previous Scores"}},"type":"object","title":"AdminGeneratePayload"},"AdminMessageCreate":{"properties":{"user_email":{"type":"string","title":"User Email"},"content":{"type":"string","title":"Content"}},"type":"object","required":["user_email","content"],"title":"AdminMessageCreate"},"AdminStatusUpdate":{"properties":{"user_email":{"type":"string","title":"User Email"},"status":{"type":"string","title":"Status"},"rapport_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rapport Name"},"rapport_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rapport Path"},"notes_internes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes Internes"}},"type":"object","required":["user_email","status"],"title":"AdminStatusUpdate"},"AdresseItem":{"properties":{"ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ref"},"adresse":{"type":"string","minLength":3,"title":"Adresse"},"code_postal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Postal"},"ville":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ville"}},"type":"object","required":["adresse"],"title":"AdresseItem"},"AdresseRequest":{"properties":{"adresses":{"items":{"$ref":"#/components/schemas/AdresseItem"},"type":"array","maxItems":10,"minItems":1,"title":"Adresses"}},"type":"object","required":["adresses"],"title":"AdresseRequest"},"AlertesLuesRequest":{"properties":{"ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Ids"}},"type":"object","title":"AlertesLuesRequest"},"AskRequest":{"properties":{"question":{"type":"string","title":"Question"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"secteur":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secteur"},"history":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"History"}},"type":"object","required":["question"],"title":"AskRequest"},"Body_flash_anonyme_upload_api_schema_flash_anonyme_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"secteur":{"type":"string","title":"Secteur","default":""},"societe":{"type":"string","title":"Societe","default":""},"ca_annuel":{"type":"string","title":"Ca Annuel","default":""}},"type":"object","required":["file"],"title":"Body_flash_anonyme_upload_api_schema_flash_anonyme_post"},"Body_internal_fichier_redresse_api_internal_fichier_redresse_post":{"properties":{"user_id":{"type":"integer","title":"User Id"},"archive":{"type":"string","format":"binary","title":"Archive"}},"type":"object","required":["user_id","archive"],"title":"Body_internal_fichier_redresse_api_internal_fichier_redresse_post"},"Body_mappy_upload_api_mappy_upload_post":{"properties":{"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files"},"client_id":{"type":"string","title":"Client Id"},"token":{"type":"string","title":"Token"},"produit":{"type":"string","title":"Produit"}},"type":"object","required":["files"],"title":"Body_mappy_upload_api_mappy_upload_post"},"Body_upload_file_api_fichiers_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_file_api_fichiers_upload_post"},"Body_upload_file_api_schema_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"secteur":{"type":"string","title":"Secteur","default":""},"role":{"type":"string","title":"Role","default":""},"nb_commerciaux":{"type":"string","title":"Nb Commerciaux","default":""},"societe":{"type":"string","title":"Societe","default":""},"produit":{"type":"string","title":"Produit","default":""}},"type":"object","required":["file"],"title":"Body_upload_file_api_schema_upload_post"},"Body_upload_rapport_api_fichiers_admin_rapport_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_rapport_api_fichiers_admin_rapport_post"},"BulkValidateRequest":{"properties":{"rule_ids":{"items":{"type":"string"},"type":"array","title":"Rule Ids"},"admin_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Note"}},"type":"object","required":["rule_ids"],"title":"BulkValidateRequest"},"CheckRequest":{"properties":{"sirets":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":1,"title":"Sirets"},"secteur":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secteur"},"volume":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Volume"},"force_co":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Force Co"},"mode":{"type":"string","enum":["unitaire","lot"],"title":"Mode","default":"unitaire"}},"type":"object","required":["sirets"],"title":"CheckRequest"},"CheckResponse":{"properties":{"nb_total":{"type":"integer","title":"Nb Total"},"nb_ok":{"type":"integer","title":"Nb Ok"},"nb_suspect":{"type":"integer","title":"Nb Suspect"},"nb_alerte":{"type":"integer","title":"Nb Alerte"},"nb_invalide":{"type":"integer","title":"Nb Invalide"},"results":{"items":{"$ref":"#/components/schemas/SiretResult"},"type":"array","title":"Results"}},"type":"object","required":["nb_total","nb_ok","nb_suspect","nb_alerte","nb_invalide","results"],"title":"CheckResponse"},"CheckoutRequest":{"properties":{"offre_code":{"type":"string","title":"Offre Code"},"coupon_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coupon Code"},"segment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Segment"}},"type":"object","required":["offre_code"],"title":"CheckoutRequest"},"ClientAnswers":{"properties":{"answers":{"additionalProperties":{"type":"string"},"type":"object","title":"Answers"}},"type":"object","required":["answers"],"title":"ClientAnswers"},"ClientRule":{"properties":{"entity_type":{"type":"string","title":"Entity Type"},"rule_type":{"type":"string","title":"Rule Type"},"rule_key":{"type":"string","title":"Rule Key"},"rule_value":{"type":"string","title":"Rule Value"},"description":{"type":"string","title":"Description","default":""}},"type":"object","required":["entity_type","rule_type","rule_key","rule_value"],"title":"ClientRule"},"ClientRulesSubmit":{"properties":{"rules":{"items":{"$ref":"#/components/schemas/ClientRule"},"type":"array","title":"Rules"}},"type":"object","required":["rules"],"title":"ClientRulesSubmit"},"CouponCreate":{"properties":{"code_promo":{"type":"string","title":"Code Promo"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"reduction_pct":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reduction Pct"},"reduction_fixed_eur":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reduction Fixed Eur"},"offres":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Offres"},"date_expiry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Expiry"}},"type":"object","required":["code_promo"],"title":"CouponCreate"},"CreateKeyRequest":{"properties":{"client":{"type":"string","maxLength":120,"minLength":1,"title":"Client"},"plan":{"type":"string","title":"Plan"},"key":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Key"}},"type":"object","required":["client","plan"],"title":"CreateKeyRequest"},"CreditsRequest":{"properties":{"pack":{"type":"string","title":"Pack"}},"type":"object","required":["pack"],"title":"CreditsRequest"},"DailyQuotaRequest":{"properties":{"quota_jour":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Quota Jour"}},"type":"object","title":"DailyQuotaRequest"},"DecesRequest":{"properties":{"personnes":{"items":{"$ref":"#/components/schemas/Personne"},"type":"array","maxItems":50,"minItems":1,"title":"Personnes"}},"type":"object","required":["personnes"],"title":"DecesRequest"},"DevisRefuserIn":{"properties":{"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"DevisRefuserIn"},"DevisRequestIn":{"properties":{"ct_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ct Code"},"nb_lignes":{"type":"integer","title":"Nb Lignes","default":0},"societe":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Societe"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"DevisRequestIn"},"DevisStatusPatch":{"properties":{"status":{"type":"string","title":"Status"}},"type":"object","required":["status"],"title":"DevisStatusPatch"},"DevisValiderIn":{"properties":{"lignes":{"items":{"$ref":"#/components/schemas/LigneIn"},"type":"array","title":"Lignes"},"coupon_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coupon Code"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","required":["lignes"],"title":"DevisValiderIn"},"DirigeantCheckRequest":{"properties":{"dirigeants":{"items":{"$ref":"#/components/schemas/DirigeantIn"},"type":"array","title":"Dirigeants"}},"type":"object","required":["dirigeants"],"title":"DirigeantCheckRequest"},"DirigeantIn":{"properties":{"siren":{"type":"string","title":"Siren"},"nom":{"type":"string","title":"Nom"},"prenoms":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prenoms"},"annee_de_naissance":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Annee De Naissance"}},"type":"object","required":["siren","nom"],"title":"DirigeantIn"},"DirigeantsBulkRequest":{"properties":{"sirens":{"items":{"type":"string"},"type":"array","maxItems":20,"title":"Sirens"}},"type":"object","required":["sirens"],"title":"DirigeantsBulkRequest"},"DirigeantsCheckRequest":{"properties":{"sirens":{"items":{"type":"string"},"type":"array","maxItems":20,"minItems":1,"title":"Sirens"}},"type":"object","required":["sirens"],"title":"DirigeantsCheckRequest"},"DossierStatus":{"properties":{"id":{"type":"integer","title":"Id"},"status":{"type":"string","title":"Status"},"file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Name"},"file_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"File Size"},"rapport_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rapport Name"},"produit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Produit"},"notes_internes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes Internes"},"step0_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Step0 Date"},"step1_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Step1 Date"},"step2_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Step2 Date"},"step3_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Step3 Date"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","status","created_at","updated_at"],"title":"DossierStatus"},"EnrichRequest":{"properties":{"ids":{"items":{"type":"string"},"type":"array","maxItems":50,"minItems":1,"title":"Ids"}},"type":"object","required":["ids"],"title":"EnrichRequest"},"ExtId":{"properties":{"id":{"type":"string","maxLength":120,"minLength":9,"title":"Id"},"type":{"type":"string","pattern":"^(siren|siret|adresse)$","title":"Type"}},"type":"object","required":["id","type"],"title":"ExtId"},"ExtVerifyRequest":{"properties":{"ids":{"items":{"$ref":"#/components/schemas/ExtId"},"type":"array","maxItems":200,"minItems":1,"title":"Ids"},"install_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Install Id"},"api_key":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Api Key"}},"type":"object","required":["ids"],"title":"ExtVerifyRequest"},"FeedbackRequest":{"properties":{"conversation_id":{"type":"integer","title":"Conversation Id"},"rating":{"type":"integer","title":"Rating"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"},"question":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question"},"answer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Answer"}},"type":"object","required":["conversation_id","rating"],"title":"FeedbackRequest"},"GateUnlockRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},"type":"object","required":["email"],"title":"GateUnlockRequest"},"GenerateRapportPayload":{"properties":{"user_id":{"type":"integer","title":"User Id"},"report_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Report Type"},"client_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Client Data"},"audit_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Audit Data"},"quality_reports":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Quality Reports"},"cross_kpis":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Cross Kpis"},"client_context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Client Context"},"previous_scores":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Previous Scores"}},"type":"object","required":["user_id"],"title":"GenerateRapportPayload"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LeadRequest":{"properties":{"prenom":{"type":"string","maxLength":80,"minLength":1,"title":"Prenom"},"nom":{"type":"string","maxLength":80,"minLength":1,"title":"Nom"},"email":{"type":"string","format":"email","title":"Email"},"societe":{"type":"string","maxLength":200,"minLength":1,"title":"Societe"},"secteur":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secteur"},"volume":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Volume"},"force_co":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Force Co"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website","default":""}},"type":"object","required":["prenom","nom","email","societe"],"title":"LeadRequest"},"LigneIn":{"properties":{"designation":{"type":"string","title":"Designation"},"quantite":{"type":"integer","title":"Quantite","default":1},"prix_unitaire_eur":{"type":"integer","title":"Prix Unitaire Eur"}},"type":"object","required":["designation","prix_unitaire_eur"],"title":"LigneIn"},"MessageCreate":{"properties":{"content":{"type":"string","title":"Content"}},"type":"object","required":["content"],"title":"MessageCreate"},"MessageOut":{"properties":{"id":{"type":"integer","title":"Id"},"dossier_id":{"type":"integer","title":"Dossier Id"},"content":{"type":"string","title":"Content"},"sender_type":{"type":"string","title":"Sender Type"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"read_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Read At"}},"type":"object","required":["id","dossier_id","content","sender_type","created_at"],"title":"MessageOut"},"OffrePatch":{"properties":{"actif":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Actif"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"nom":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nom"},"tarifs_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Tarifs Json"},"features":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Features"}},"type":"object","title":"OffrePatch"},"PaiementLienCreate":{"properties":{"ct_code":{"type":"string","title":"Ct Code"},"montant_eur":{"type":"integer","title":"Montant Eur"},"coupon_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coupon Code"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","required":["ct_code","montant_eur"],"title":"PaiementLienCreate"},"PaiementStatutPatch":{"properties":{"statut":{"type":"string","title":"Statut"}},"type":"object","required":["statut"],"title":"PaiementStatutPatch"},"Personne":{"properties":{"nom":{"type":"string","minLength":2,"title":"Nom"},"prenom":{"type":"string","minLength":1,"title":"Prenom"},"date_naissance":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Naissance"},"annee_naissance":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Annee Naissance"},"code_postal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Postal"},"ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ref"}},"type":"object","required":["nom","prenom"],"title":"Personne"},"PlanRequest":{"properties":{"plan":{"type":"string","title":"Plan"}},"type":"object","required":["plan"],"title":"PlanRequest"},"PlatformSettingsPatch":{"properties":{"max_lignes_zip":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Lignes Zip"}},"type":"object","title":"PlatformSettingsPatch"},"PortefeuilleRequest":{"properties":{"action":{"type":"string","enum":["ajouter","retirer"],"title":"Action","default":"ajouter"},"sirens":{"items":{"type":"string"},"type":"array","maxItems":200,"minItems":1,"title":"Sirens"},"labels":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Labels"}},"type":"object","required":["sirens"],"title":"PortefeuilleRequest"},"RapportConfigUpdate":{"properties":{"type":{"type":"string","title":"Type"},"mode":{"type":"string","title":"Mode"}},"type":"object","required":["type","mode"],"title":"RapportConfigUpdate"},"RejectRequest":{"properties":{"reason":{"type":"string","title":"Reason"}},"type":"object","required":["reason"],"title":"RejectRequest"},"RemboursementCreate":{"properties":{"motif":{"type":"string","title":"Motif"},"montant_eur":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Montant Eur"}},"type":"object","required":["motif"],"title":"RemboursementCreate"},"ResetConfirm":{"properties":{"token":{"type":"string","title":"Token"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["token","new_password"],"title":"ResetConfirm"},"ResetRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ResetRequest"},"ReviewSubmit":{"properties":{"nom":{"type":"string","maxLength":80,"minLength":2,"title":"Nom"},"entreprise":{"type":"string","maxLength":120,"minLength":2,"title":"Entreprise"},"role":{"type":"string","maxLength":80,"minLength":2,"title":"Role"},"secteur":{"type":"string","maxLength":80,"minLength":2,"title":"Secteur"},"email":{"type":"string","format":"email","title":"Email"},"note":{"type":"integer","maximum":5.0,"minimum":1.0,"title":"Note"},"commentaire":{"type":"string","maxLength":1200,"minLength":20,"title":"Commentaire"},"anonyme":{"type":"boolean","title":"Anonyme","default":false},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website","default":""}},"type":"object","required":["nom","entreprise","role","secteur","email","note","commentaire"],"title":"ReviewSubmit"},"SanteCheckRequest":{"properties":{"sirens":{"items":{"type":"string"},"type":"array","maxItems":20,"minItems":1,"title":"Sirens"}},"type":"object","required":["sirens"],"title":"SanteCheckRequest"},"SignupRequest":{"properties":{"email":{"type":"string","maxLength":254,"minLength":5,"title":"Email"},"societe":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Societe"}},"type":"object","required":["email"],"title":"SignupRequest"},"SiretResult":{"properties":{"siret":{"type":"string","title":"Siret"},"siren":{"type":"string","title":"Siren"},"statut":{"type":"string","enum":["ok","suspect","alerte","invalide"],"title":"Statut"},"libelle":{"type":"string","title":"Libelle"},"raisons":{"items":{"type":"string"},"type":"array","title":"Raisons","default":[]},"denomination":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Denomination"},"statut_legal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Statut Legal"}},"type":"object","required":["siret","siren","statut","libelle"],"title":"SiretResult"},"StatusHistoryOut":{"properties":{"id":{"type":"integer","title":"Id"},"dossier_id":{"type":"integer","title":"Dossier Id"},"old_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Old Status"},"new_status":{"type":"string","title":"New Status"},"changed_by":{"type":"string","title":"Changed By"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"changed_at":{"type":"string","format":"date-time","title":"Changed At"}},"type":"object","required":["id","dossier_id","old_status","new_status","changed_by","note","changed_at"],"title":"StatusHistoryOut"},"StatusUpdatePayload":{"properties":{"user_id":{"type":"integer","title":"User Id"},"status":{"type":"string","title":"Status"},"notes_internes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes Internes"},"output_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Path"},"rapport_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rapport Name"},"societe":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Societe"}},"type":"object","required":["user_id","status"],"title":"StatusUpdatePayload"},"SubscribeRequest":{"properties":{"plan":{"type":"string","title":"Plan"}},"type":"object","required":["plan"],"title":"SubscribeRequest"},"ToggleRequest":{"properties":{"actif":{"type":"boolean","title":"Actif"}},"type":"object","required":["actif"],"title":"ToggleRequest"},"TokenResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"user_name":{"type":"string","title":"User Name"},"user_email":{"type":"string","title":"User Email"}},"type":"object","required":["access_token","user_name","user_email"],"title":"TokenResponse"},"UserLogin":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"UserLogin"},"UserRegister":{"properties":{"full_name":{"type":"string","title":"Full Name"},"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"},"password_confirm":{"type":"string","title":"Password Confirm"},"societe":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Societe"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"secteur":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secteur"},"nb_commerciaux":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Nb Commerciaux"},"ca_annuel":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ca Annuel"},"volume_crm":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Volume Crm"}},"type":"object","required":["full_name","email","password","password_confirm"],"title":"UserRegister"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"/api/auth/login"}}}}}}