From 4c180fe1f887ff9e2ca4939fa37b94105ed8b21b Mon Sep 17 00:00:00 2001 From: el Date: Tue, 1 Jul 2025 18:25:10 +0200 Subject: [PATCH] departements --- backend/api/la_bonne_boite_bundled.json | 2833 ++++++++++++ backend/api/marche_du_travail_bundled.json | 3405 ++++++++++++++ backend/api/offres_emploi_v2_bundled.json | 2463 ++++++++++ backend/api/rome_4_competences.json | 4017 +++++++++++++++++ backend/api/rome_4_fiches_rome.json | 674 +++ backend/api/rome_4_metiers.json | 4015 ++++++++++++++++ backend/api/rome_4_situations_de_travail.json | 358 ++ backend/api/romeo_v2.json | 811 ++++ ..._formation_et_acces_a_lemploi_bundled.json | 2781 ++++++++++++ backend/core/config.py | 9 +- backend/routers/ai.py | 9 +- backend/routers/document.py | 136 +- backend/routers/france_travail_offers.py | 87 +- backend/schemas/france_travail.py | 3 +- backend/services/ai_service.py | 286 +- .../services/france_travail_auth_service.py | 53 +- .../services/france_travail_offer_service.py | 344 +- backend/services/romeo_service.py | 75 +- test/test_extraction.py | 71 + 19 files changed, 21999 insertions(+), 431 deletions(-) create mode 100644 backend/api/la_bonne_boite_bundled.json create mode 100644 backend/api/marche_du_travail_bundled.json create mode 100644 backend/api/offres_emploi_v2_bundled.json create mode 100644 backend/api/rome_4_competences.json create mode 100644 backend/api/rome_4_fiches_rome.json create mode 100644 backend/api/rome_4_metiers.json create mode 100644 backend/api/rome_4_situations_de_travail.json create mode 100644 backend/api/romeo_v2.json create mode 100644 backend/api/sortants_de_formation_et_acces_a_lemploi_bundled.json create mode 100644 test/test_extraction.py diff --git a/backend/api/la_bonne_boite_bundled.json b/backend/api/la_bonne_boite_bundled.json new file mode 100644 index 0000000..956322f --- /dev/null +++ b/backend/api/la_bonne_boite_bundled.json @@ -0,0 +1,2833 @@ +{ + "openapi": "3.1.0", + "x-stoplight": { + "id": "jmjaao1xo3usi" + }, + "info": { + "title": "La Bonne Boite", + "description": "La Bonne Boîte cible les entreprises ayant des perspectives d'embauche élevées et permet d'être plus efficace dans l'envoi de candidatures spontanées.\n\nCe ciblage est rendu possible grâce à l'analyse approfondie de millions d'embauches, dans les entreprises françaises.\n\nLes ressources de l'API vous permettent :\n\n- De rechercher des entreprises qui envisagent de recruter dans les 6 prochains mois ;\n- D'obtenir directement le nombre d'entreprises prévoyant de recruter dans cette période ;\n- D'accéder à des informations détaillées sur les entreprises présentant un fort potentiel de recrutement.\n\n***Scopes :*** `api_labonneboitev2`,`search`,`office`\n\n***Royaume :*** `partenaire`\n", + "version": "2.27.3" + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/labonneboite/v2" + } + ], + "paths": { + "/recherche": { + "get": { + "tags": [ + "Recherche" + ], + "summary": "Recherche d'entreprise avec potentiel d'embauche à partir d'un métier et d'un emplacement", + "description": "Cette ressource permet de récupérer les entreprises à fort potentiel d'embauche (par ordre de score décroissant).", + "operationId": "search_search__get", + "parameters": [ + { + "name": "job", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Métier", + "description": "Recherche libre de métier. La recherche tentera de trouver une correspondance dans les libelles de:\n - rome\n - domain\n - granddomain\n - naf", + "examples": [ + "Boul" + ] + }, + "description": "Recherche libre de métier. La recherche tentera de trouver une correspondance dans les libelles de:\n - rome\n - domain\n - granddomain\n - naf", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche d'un métier commançant par `Boul`", + "value": "Boul" + } + } + }, + { + "name": "domain", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Domaine", + "description": "Recherche par domaine d'activité professionnel", + "examples": [ + "A14" + ] + }, + "description": "Recherche par domaine d'activité professionnel", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans les domaines 'Production' et 'Instruments de musique'", + "value": [ + "A14", + "B15" + ] + } + } + }, + { + "name": "granddomain", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Grand Domaine", + "description": "Recherche par grand domaine d'activité professionnel", + "examples": [ + "A" + ] + }, + "description": "Recherche par grand domaine d'activité professionnel", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans les grand domaines `Agriculture et Pêche, Espaces naturels et Espaces verts, Soins aux animaux` et `Arts et Façonnage d'ouvrages d'art`", + "value": [ + "A", + "B" + ] + } + } + }, + { + "name": "rome", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "ROME", + "description": "Recherche par code ROME. Référentiel: [Fiche métier France Travail](https://www.francetravail.fr/candidat/decouvrir-le-marche-du-travail/les-fiches-metiers/les-fiches-metiers-sont-regroupe.html)\n ", + "examples": [ + "D1102" + ] + }, + "description": "Recherche par code ROME. Référentiel: [Fiche métier France Travail](https://www.francetravail.fr/candidat/decouvrir-le-marche-du-travail/les-fiches-metiers/les-fiches-metiers-sont-regroupe.html)\n ", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche le code rome `Boulangerie - viennoiserie`", + "value": [ + "D1102" + ] + } + } + }, + { + "name": "naf", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "NAF", + "description": "Code métier NAF associés aux entreprises. [Nomenclature d'activités française de l'Insee (rév. 2, 2008 - Niveau 2 - Liste des divisions)](https://www.insee.fr/fr/information/2406147)", + "examples": [ + "9499Z" + ] + }, + "description": "Code métier NAF associés aux entreprises. [Nomenclature d'activités française de l'Insee (rév. 2, 2008 - Niveau 2 - Liste des divisions)](https://www.insee.fr/fr/information/2406147)", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche les codes naf `Autres organisations fonctionnant par adhésion volontaire` et `Restauration de type rapide`", + "value": [ + "9499Z", + "5610C" + ] + } + } + }, + { + "name": "location", + "in": "query", + "required": false, + "schema": { + "type": "string", + "title": "Lieu", + "description": "Recherche libre de lieu. La recherche tentera de trouver une correspondance dans les noms de villes, départements ou régions. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": [ + "Met" + ] + }, + "description": "Recherche libre de lieu. La recherche tentera de trouver une correspondance dans les noms de villes, départements ou régions. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche d'un lieu commançant par 'Met'", + "value": "Met" + } + } + }, + { + "name": "region", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Nom de la Région", + "description": "Nom de la région. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": [ + "Pays de la Loire" + ] + }, + "description": "Nom de la région. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans la région `Pays de Loire`", + "value": [ + "Pays de la Loire" + ] + } + } + }, + { + "name": "region_number", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "integer" + }, + "title": "Numéro de la Région", + "description": "Numéro de la région. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": [ + 32 + ] + }, + "description": "Numéro de la région. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans la région `Hauts de France`", + "value": [ + 32 + ] + } + } + }, + { + "name": "department", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Département", + "description": "Nom du département. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": [ + "Moselle" + ] + }, + "description": "Nom du département. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans les départements `Moselle` et `Loire Atlantique`", + "value": [ + "Loire-Atlantique", + "Moselle" + ] + } + } + }, + { + "name": "department_number", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "integer" + }, + "title": "Numéro de département", + "description": "Numéro du département. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": [ + 57 + ] + }, + "description": "Numéro du département. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans les départements `Moselle` et `Loire Atlantique`", + "value": [ + 57, + 44 + ] + } + } + }, + { + "name": "city", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Ville", + "description": "Nom exact de la ville recherchée", + "examples": [ + "Metz" + ] + }, + "description": "Nom exact de la ville recherchée", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans `Metz`", + "value": [ + "Metz" + ] + } + } + }, + { + "name": "citycode", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Code INSEE", + "description": "Code INSEE de la ville recherchée", + "examples": [ + "57463" + ] + }, + "description": "Code INSEE de la ville recherchée", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans `Metz`", + "value": [ + "57463" + ] + } + } + }, + { + "name": "postcode", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Code Postal", + "description": "Code postal de la ville recherchée", + "examples": [ + "57000" + ] + }, + "description": "Code postal de la ville recherchée", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans `Metz`", + "value": [ + "57000" + ] + } + } + }, + { + "name": "latitude", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Latitude", + "description": "Latitude du point géographique à proximité duquel on recherche des entreprises à fort potentiel d'embauche.\n\n Pour utiliser ce paramètre, il faut préciser obligatoirement `latitude`, `longitude`et `distance`", + "examples": [ + 47.21837 + ] + }, + "description": "Latitude du point géographique à proximité duquel on recherche des entreprises à fort potentiel d'embauche.\n\n Pour utiliser ce paramètre, il faut préciser obligatoirement `latitude`, `longitude`et `distance`", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche à `Nantes`", + "value": 47.21837 + } + } + }, + { + "name": "longitude", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Longitude", + "description": "Longitude du point géographique à proximité duquel on recherche des entreprises à fort potentiel d'embauche.\n\n Pour utiliser ce paramètre, il faut préciser obligatoirement `latitude`, `longitude`et `distance`", + "examples": [ + -1.55362 + ] + }, + "description": "Longitude du point géographique à proximité duquel on recherche des entreprises à fort potentiel d'embauche.\n\n Pour utiliser ce paramètre, il faut préciser obligatoirement `latitude`, `longitude`et `distance`", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche à `Nantes`", + "value": -1.55362 + } + } + }, + { + "name": "distance", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer", + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Distance", + "description": "Périmètre du rayon de recherche (en kilomètres).\n\nLongitude du point géographique à proximité duquel on recherche des entreprises à fort potentiel d'embauche.\n\n**Utilisation**:\nCe paramètre (en **km**) s'utilise en combinaison avec:\n\n- `latitude` & `longitude`\n- `citycode`\n\nSi les coordonnées `latitude` / `longitude` sont utilisées, il s'agit du rayon du cercle autour du point géographique défini par le couple\n`longitude` / `latitude`.\nSinon, une recherche est effectué autour des coordonnées géographique des mairies pour les villes dans la recherche (citycode).\n\nLa distance doit être comprise entre ] 0, 200km [", + "examples": [ + 25 + ], + "lte": 200 + }, + "description": "Périmètre du rayon de recherche (en kilomètres).\n\nLongitude du point géographique à proximité duquel on recherche des entreprises à fort potentiel d'embauche.\n\n**Utilisation**:\nCe paramètre (en **km**) s'utilise en combinaison avec:\n\n- `latitude` & `longitude`\n- `citycode`\n\nSi les coordonnées `latitude` / `longitude` sont utilisées, il s'agit du rayon du cercle autour du point géographique défini par le couple\n`longitude` / `latitude`.\nSinon, une recherche est effectué autour des coordonnées géographique des mairies pour les villes dans la recherche (citycode).\n\nLa distance doit être comprise entre ] 0, 200km [", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans un rayon de 25km", + "value": 25 + } + } + }, + { + "name": "bbox", + "in": "query", + "required": false, + "schema": { + "type": "string", + "title": "BBOX", + "description": "Ce paramètre permet de définir un rectangle géographique pour définir la zone de recherche.\n\n**Référentiel**: https://wiki.openstreetmap.org/wiki/Bounding_box\n\n**Utilisation**:\nPour utiliser ce paramètre, il faut préciser obligatoirement 4 valeurs séparées par des `|` :\n\n left|bottom|right|top\n\n - left: longitude du bord gauche\n - bottom: latitude du bord en bas\n - right: longitude du bord droit\n - top: latitude du bord en haut", + "examples": [ + "-1.5|47.2|-1.6|47.3" + ] + }, + "description": "Ce paramètre permet de définir un rectangle géographique pour définir la zone de recherche.\n\n**Référentiel**: https://wiki.openstreetmap.org/wiki/Bounding_box\n\n**Utilisation**:\nPour utiliser ce paramètre, il faut préciser obligatoirement 4 valeurs séparées par des `|` :\n\n left|bottom|right|top\n\n - left: longitude du bord gauche\n - bottom: latitude du bord en bas\n - right: longitude du bord droit\n - top: latitude du bord en haut", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans un rectangle autour de Nantes", + "value": "-1.5|47.2|-1.6|47.3" + } + } + }, + { + "name": "sort_by", + "in": "query", + "required": false, + "schema": { + "type": "string", + "title": "Critère du tri", + "description": "Element de l'index elastic search sur lequel effectuer le tri. Les valeurs possible sont romes.hiring_potential, hiring_potential", + "examples": [ + "romes.hiring_score" + ], + "default": "hiring_potential" + }, + "description": "Element de l'index elastic search sur lequel effectuer le tri. Les valeurs possible sont romes.hiring_potential, hiring_potential", + "examples": { + "default": { + "summary": "Tri par score de ROME", + "description": "tri par score de code rome (défaut)", + "value": "romes.hiring_score" + }, + "normal": { + "summary": "Trie par score entreprise", + "description": "tri par score d'entreprise", + "value": "hiring_score" + } + } + }, + { + "name": "sort_direction", + "in": "query", + "required": false, + "schema": { + "type": "string", + "title": "Sens du tri", + "description": "Sens du tri", + "examples": [ + "desc" + ], + "default": "desc" + }, + "description": "Sens du tri", + "examples": { + "normal": { + "summary": "Ascendant", + "description": "tri du plus grand au plus petit (défaut)", + "value": "asc" + }, + "desc": { + "summary": "Descendant", + "description": "tri du plus petit au plus grand", + "value": "desc" + } + } + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "title": "Page", + "description": "Numéro de la page demandée (à partir de 1).", + "examples": [ + 1 + ], + "default": 1 + }, + "description": "Numéro de la page demandée (à partir de 1).", + "examples": { + "normal": { + "summary": "Exemple 1", + "description": "Obtenir la première page", + "value": 1 + } + } + }, + { + "name": "page_size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "title": "Page", + "description": "Nombre de résultats par page. Valeur par défaut 20. La valeur maximale est 100.", + "examples": [ + 50 + ], + "default": 10 + }, + "description": "Nombre de résultats par page. Valeur par défaut 20. La valeur maximale est 100.", + "examples": { + "normal": { + "summary": "Exemple 1", + "description": "Obtenir 50 résultats par requête", + "value": 50 + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer IwHfTV3cHR_ioPusPoyjydtdIf0" + } + } + ], + "responses": { + "200": { + "description": "Succès de la requête.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchResponse" + }, + "examples": { + "Example 1": { + "value": { + "hits": 0, + "params": { + "citycode": [ + "57463" + ], + "department": [ + "" + ], + "page": 1, + "page_size": 2, + "postcode": [ + "44000" + ], + "rome": [ + "D1102" + ], + "sort_by": "", + "sort_direction": "" + }, + "resolved_params": { + "jobs": [ + { + "display": "Boulangerie - viennoiserie", + "selection": "", + "type": "rome", + "value": "D1102" + } + ], + "locations": [ + { + "display": "Metz", + "geo": { + "latitude": 49.1196, + "longitude": 6.1764 + }, + "selection": "", + "type": "city", + "value": "57463" + } + ] + }, + "items": [ + { + "city": "Metz", + "citycode": "57463", + "company_name": "MAISON NICOLAS", + "department": "Moselle", + "department_number": 57, + "headcount_max": "5", + "headcount_min": "3", + "hiring_potential": 2.4201609999999993, + "id": 4636621, + "is_high_potential": false, + "location": { + "lat": 49.1196, + "lon": 6.17373 + }, + "naf": "4781Z", + "naf_label": "Commerce de détail alimentaire sur éventaires et marchés", + "office_name": "", + "postcode": "57000", + "region": "Grand Est", + "rome": "D1102", + "siret": "30509416100034" + } + ] + } + } + } + } + }, + "links": { + "example": { + "description": "\n**GET** https://api.pole-emploi.io/partenaire/labonneboite/v1/company/?distance=30&latitude=49.119146&longitude=6.17602&rome_codes=M1607\n\n**Authorization**: Bearer [Access token]\n", + "parameters": { + "distance": "30", + "latitude": "49.119146", + "longitude": "6.17602", + "rome": "M1607" + } + } + } + }, + "403": { + "description": "Non authorisé.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenError" + } + } + } + }, + "422": { + "description": "Erreur de validation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomValidationError" + } + } + } + }, + "500": { + "description": "Erreur interne.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InternalError" + } + } + } + } + }, + "x-stoplight": { + "id": "rc3z3pyirry8c" + } + }, + "parameters": [] + }, + "/nombreEntreprise": { + "get": { + "tags": [ + "Recherche" + ], + "summary": "Nombre d'entreprise avec potentiel d'embauche à partir d'un métier et d'un emplacement", + "description": "Cette ressource permet de récupérer le nombre d'entreprises susceptibles de recruter dans les 6 prochains mois.", + "operationId": "search_count_search_count__get", + "parameters": [ + { + "name": "job", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Métier", + "description": "Recherche libre de métier. La recherche tentera de trouver une correspondance dans les libelles de:\n - rome\n - domain\n - granddomain\n - naf", + "examples": [ + "Boul" + ] + }, + "description": "Recherche libre de métier. La recherche tentera de trouver une correspondance dans les libelles de:\n - rome\n - domain\n - granddomain\n - naf", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche d'un métier commançant par `Boul`", + "value": "Boul" + } + } + }, + { + "name": "domain", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Domaine", + "description": "Recherche par domaine d'activité professionnel", + "examples": [ + "A14" + ] + }, + "description": "Recherche par domaine d'activité professionnel", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans les domaines 'Production' et 'Instruments de musique'", + "value": [ + "A14", + "B15" + ] + } + } + }, + { + "name": "granddomain", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Grand Domaine", + "description": "Recherche par grand domaine d'activité professionnel", + "examples": [ + "A" + ] + }, + "description": "Recherche par grand domaine d'activité professionnel", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans les grand domaines `Agriculture et Pêche, Espaces naturels et Espaces verts, Soins aux animaux` et `Arts et Façonnage d'ouvrages d'art`", + "value": [ + "A", + "B" + ] + } + } + }, + { + "name": "rome", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "ROME", + "description": "Recherche par code ROME. Référentiel: [Fiche métier France Travail](https://www.francetravail.fr/candidat/decouvrir-le-marche-du-travail/les-fiches-metiers/les-fiches-metiers-sont-regroupe.html)\n ", + "examples": [ + "D1102" + ] + }, + "description": "Recherche par code ROME. Référentiel: [Fiche métier France Travail](https://www.francetravail.fr/candidat/decouvrir-le-marche-du-travail/les-fiches-metiers/les-fiches-metiers-sont-regroupe.html)\n ", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche le code rome `Boulangerie - viennoiserie`", + "value": [ + "D1102" + ] + } + } + }, + { + "name": "naf", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "NAF", + "description": "Code métier NAF associés aux entreprises. [Nomenclature d'activités française de l'Insee (rév. 2, 2008 - Niveau 2 - Liste des divisions)](https://www.insee.fr/fr/information/2406147)", + "examples": [ + "9499Z" + ] + }, + "description": "Code métier NAF associés aux entreprises. [Nomenclature d'activités française de l'Insee (rév. 2, 2008 - Niveau 2 - Liste des divisions)](https://www.insee.fr/fr/information/2406147)", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche les codes naf `Autres organisations fonctionnant par adhésion volontaire` et `Restauration de type rapide`", + "value": [ + "9499Z", + "5610C" + ] + } + } + }, + { + "name": "location", + "in": "query", + "required": false, + "schema": { + "type": "string", + "title": "Lieu", + "description": "Recherche libre de lieu. La recherche tentera de trouver une correspondance dans les noms de villes, départements ou régions. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": [ + "Met" + ] + }, + "description": "Recherche libre de lieu. La recherche tentera de trouver une correspondance dans les noms de villes, départements ou régions. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche d'un lieu commançant par 'Met'", + "value": "Met" + } + } + }, + { + "name": "region", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Nom de la Région", + "description": "Nom de la région. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": [ + "Pays de la Loire" + ] + }, + "description": "Nom de la région. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans la région `Pays de Loire`", + "value": [ + "Pays de la Loire" + ] + } + } + }, + { + "name": "region_number", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "integer" + }, + "title": "Numéro de la Région", + "description": "Numéro de la région. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": [ + 32 + ] + }, + "description": "Numéro de la région. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans la région `Hauts de France`", + "value": [ + 32 + ] + } + } + }, + { + "name": "department", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Département", + "description": "Nom du département. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": [ + "Moselle" + ] + }, + "description": "Nom du département. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans les départements `Moselle` et `Loire Atlantique`", + "value": [ + "Loire-Atlantique", + "Moselle" + ] + } + } + }, + { + "name": "department_number", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "integer" + }, + "title": "Numéro de département", + "description": "Numéro du département. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": [ + 57 + ] + }, + "description": "Numéro du département. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans les départements `Moselle` et `Loire Atlantique`", + "value": [ + 57, + 44 + ] + } + } + }, + { + "name": "city", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Ville", + "description": "Nom exact de la ville recherchée", + "examples": [ + "Metz" + ] + }, + "description": "Nom exact de la ville recherchée", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans `Metz`", + "value": [ + "Metz" + ] + } + } + }, + { + "name": "citycode", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Code INSEE", + "description": "Code INSEE de la ville recherchée", + "examples": [ + "57463" + ] + }, + "description": "Code INSEE de la ville recherchée", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans `Metz`", + "value": [ + "57463" + ] + } + } + }, + { + "name": "postcode", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Code Postal", + "description": "Code postal de la ville recherchée", + "examples": [ + "57000" + ] + }, + "description": "Code postal de la ville recherchée", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans `Metz`", + "value": [ + "57000" + ] + } + } + }, + { + "name": "latitude", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Latitude", + "description": "Latitude du point géographique à proximité duquel on recherche des entreprises à fort potentiel d'embauche.\n\n Pour utiliser ce paramètre, il faut préciser obligatoirement `latitude`, `longitude`et `distance`", + "examples": [ + 47.21837 + ] + }, + "description": "Latitude du point géographique à proximité duquel on recherche des entreprises à fort potentiel d'embauche.\n\n Pour utiliser ce paramètre, il faut préciser obligatoirement `latitude`, `longitude`et `distance`", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche à `Nantes`", + "value": 47.21837 + } + } + }, + { + "name": "longitude", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Longitude", + "description": "Longitude du point géographique à proximité duquel on recherche des entreprises à fort potentiel d'embauche.\n\n Pour utiliser ce paramètre, il faut préciser obligatoirement `latitude`, `longitude`et `distance`", + "examples": [ + -1.55362 + ] + }, + "description": "Longitude du point géographique à proximité duquel on recherche des entreprises à fort potentiel d'embauche.\n\n Pour utiliser ce paramètre, il faut préciser obligatoirement `latitude`, `longitude`et `distance`", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche à `Nantes`", + "value": -1.55362 + } + } + }, + { + "name": "distance", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer", + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Distance", + "description": "Périmètre du rayon de recherche (en kilomètres).\n\nLongitude du point géographique à proximité duquel on recherche des entreprises à fort potentiel d'embauche.\n\n**Utilisation**:\nCe paramètre (en **km**) s'utilise en combinaison avec:\n\n- `latitude` & `longitude`\n- `citycode`\n\nSi les coordonnées `latitude` / `longitude` sont utilisées, il s'agit du rayon du cercle autour du point géographique défini par le couple\n`longitude` / `latitude`.\nSinon, une recherche est effectué autour des coordonnées géographique des mairies pour les villes dans la recherche (citycode).\n\nLa distance doit être comprise entre ] 0, 200km [", + "examples": [ + 25 + ], + "lte": 200 + }, + "description": "Périmètre du rayon de recherche (en kilomètres).\n\nLongitude du point géographique à proximité duquel on recherche des entreprises à fort potentiel d'embauche.\n\n**Utilisation**:\nCe paramètre (en **km**) s'utilise en combinaison avec:\n\n- `latitude` & `longitude`\n- `citycode`\n\nSi les coordonnées `latitude` / `longitude` sont utilisées, il s'agit du rayon du cercle autour du point géographique défini par le couple\n`longitude` / `latitude`.\nSinon, une recherche est effectué autour des coordonnées géographique des mairies pour les villes dans la recherche (citycode).\n\nLa distance doit être comprise entre ] 0, 200km [", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans un rayon de 25km", + "value": 25 + } + } + }, + { + "name": "bbox", + "in": "query", + "required": false, + "schema": { + "type": "string", + "title": "BBOX", + "description": "Ce paramètre permet de définir un rectangle géographique pour définir la zone de recherche.\n\n**Référentiel**: https://wiki.openstreetmap.org/wiki/Bounding_box\n\n**Utilisation**:\nPour utiliser ce paramètre, il faut préciser obligatoirement 4 valeurs séparées par des `|` :\n\n left|bottom|right|top\n\n - left: longitude du bord gauche\n - bottom: latitude du bord en bas\n - right: longitude du bord droit\n - top: latitude du bord en haut", + "examples": [ + "-1.5|47.2|-1.6|47.3" + ] + }, + "description": "Ce paramètre permet de définir un rectangle géographique pour définir la zone de recherche.\n\n**Référentiel**: https://wiki.openstreetmap.org/wiki/Bounding_box\n\n**Utilisation**:\nPour utiliser ce paramètre, il faut préciser obligatoirement 4 valeurs séparées par des `|` :\n\n left|bottom|right|top\n\n - left: longitude du bord gauche\n - bottom: latitude du bord en bas\n - right: longitude du bord droit\n - top: latitude du bord en haut", + "examples": { + "normal": { + "summary": "Example 1", + "description": "Recherche dans un rectangle autour de Nantes", + "value": "-1.5|47.2|-1.6|47.3" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer IwHfTV3cHR_ioPusPoyjydtdIf0" + } + } + ], + "responses": { + "200": { + "description": "Succès de la requête.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchCountResponse" + }, + "examples": { + "Example 1": { + "value": { + "hits": 0, + "params": { + "citycode": [ + "57463" + ], + "department": [ + "" + ], + "page": 1, + "page_size": 2, + "postcode": [ + "44000" + ], + "rome": [ + "D1102" + ], + "sort_by": "", + "sort_direction": "" + }, + "resolved_params": { + "jobs": [ + { + "display": "Boulangerie - viennoiserie", + "selection": "", + "type": "rome", + "value": "D1102" + } + ], + "locations": [ + { + "display": "Metz", + "geo": { + "latitude": 49.1196, + "longitude": 6.1764 + }, + "selection": "", + "type": "city", + "value": "57463" + } + ] + } + } + } + } + } + }, + "links": { + "example": { + "description": "\n**GET** https://api.pole-emploi.io/partenaire/labonneboite/v1/company/count/?distance=30&latitude=49.119146&longitude=6.17602&rome_codes=M1607\n\n**Authorization**: Bearer [Access token]\n", + "parameters": { + "distance": "30", + "latitude": "49.119146", + "longitude": "6.17602", + "rome": "M1607" + } + } + } + }, + "403": { + "description": "Non authorisé.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenError" + } + } + } + }, + "422": { + "description": "Erreur de validation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomValidationError" + } + } + } + }, + "500": { + "description": "Erreur interne.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InternalError" + } + } + } + } + }, + "x-stoplight": { + "id": "kdezkce3z7jqy" + } + }, + "parameters": [] + }, + "/potentielEmbauche": { + "get": { + "tags": [ + "Entreprise" + ], + "summary": "Cette ressource permet de consulter les entreprises à fort potentiel d'embauche par leur numéro de siret.", + "description": "Recherche d'information pour des sirets avec potentiel d'embauche", + "operationId": "with_scores_company_scores__get", + "parameters": [ + { + "name": "siret", + "in": "query", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Métier", + "description": "Numéro de siret exact de l'entreprise recherché.", + "examples": [ + "13000548100010" + ], + "required": true + }, + "description": "Numéro de siret exact de l'entreprise recherché.", + "examples": { + "normal": { + "summary": "Exemple 1", + "description": "Recherche des sirets `82193994900045` et `13000548100010`", + "value": [ + "13000548100010", + "82193994900045" + ] + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer IwHfTV3cHR_ioPusPoyjydtdIf0" + } + } + ], + "responses": { + "200": { + "description": "Succès de la requête.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OfficeScoreResponse" + }, + "examples": { + "Example 1": { + "value": { + "hits": 1, + "items": [ + { + "city": "Paris", + "citycode": "75120", + "company_name": "POLE EMPLOI", + "department": "Paris", + "department_number": 75, + "headcount_max": "1999", + "headcount_min": "1000", + "hiring_potential": 91.38373304856015, + "id": 12905309, + "is_high_potential": true, + "location": { + "lat": 48.8778, + "lon": 2.40989 + }, + "naf": "8413Z", + "naf_label": "Administration publique (tutelle) des activités économiques", + "office_name": "", + "postcode": "75020", + "region": "Île-de-France", + "siret": "13000548100010" + } + ] + } + } + } + } + }, + "links": { + "example": { + "description": "\n**GET** GET https://api.pole-emploi.io/partenaire/labonneboite/v2/company/scores/?siret=13000548100010\n\n**Authorization**: Bearer [Access token]\n", + "parameters": { + "siret": "13000548100010" + } + } + } + }, + "403": { + "description": "Non authorisé.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenError" + } + } + } + }, + "422": { + "description": "Erreur de validation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomValidationError" + } + } + } + }, + "500": { + "description": "Erreur interne.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InternalError" + } + } + } + } + }, + "x-stoplight": { + "id": "ln57z1mmngtyc" + } + }, + "parameters": [] + } + }, + "components": { + "schemas": { + "CustomValidationError": { + "properties": { + "errors": { + "items": { + "$ref": "#/components/schemas/ValidationErrorDetail" + }, + "type": "array", + "title": "Errors" + } + }, + "type": "object", + "required": [ + "errors" + ], + "title": "CustomValidationError", + "x-stoplight": { + "id": "oyzninkxy756j" + } + }, + "ForbiddenError": { + "properties": { + "error": { + "type": "string", + "title": "Non authorisé", + "description": "Message d'erreur dans le cas d'une erreur 403", + "examples": [ + "Vous n'avez pas le droit d'accéder à la ressource demandée" + ] + } + }, + "type": "object", + "required": [ + "error" + ], + "title": "ForbiddenError", + "x-stoplight": { + "id": "tgytag5k6x2zg" + } + }, + "GeoCoords": { + "properties": { + "latitude": { + "type": "number", + "title": "Latitude", + "description": "Latitude de l'entreprise.", + "examples": [ + 49.1196 + ] + }, + "longitude": { + "type": "number", + "title": "Longitude", + "description": "Longitude de l'entreprise.", + "examples": [ + 6.1764 + ] + } + }, + "type": "object", + "required": [ + "latitude", + "longitude" + ], + "title": "GeoCoords", + "example": { + "latitude": 49.1196, + "longitude": 6.1764 + }, + "x-stoplight": { + "id": "awt1ekmev1cql" + } + }, + "InternalError": { + "properties": { + "error": { + "type": "string", + "title": "Erreur interne du serveur", + "description": "Message d'erreur dans le cas d'une erreur 500", + "examples": [ + "Une erreur est survenue." + ] + } + }, + "type": "object", + "required": [ + "error" + ], + "title": "InternalError", + "x-stoplight": { + "id": "s2xugls99jv1b" + } + }, + "JobItem": { + "properties": { + "type": { + "allOf": [ + { + "$ref": "#/components/schemas/JobType" + } + ], + "title": "Type de métier", + "description": "Il peut être de l'une de ces catégories:\n - rome\n - domain\n - granddomain\n - naf", + "examples": [ + "rome" + ] + }, + "value": { + "type": "string", + "title": "Code du métier", + "description": "En fonction du type du métier, cette valeur peut varier. Mais elle représente le code et non l'appellation", + "examples": [ + "D1102" + ] + }, + "display": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Appellation du métier", + "description": "Ceci est l'appellation du métier", + "default": "", + "examples": [ + "Boulangerie - viennoiserie" + ] + }, + "selection": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Autre Appellation du métier", + "description": "Ce champ a été mis en place pour les besoins du site La Bonne Boite et peut être ignoré.", + "default": "", + "examples": [ + "" + ] + } + }, + "type": "object", + "required": [ + "type", + "value" + ], + "title": "JobItem", + "example": { + "display": "Boulangerie - viennoiserie", + "selection": "", + "type": "rome", + "value": "D1102" + }, + "x-stoplight": { + "id": "5ylwqs5566k66" + } + }, + "JobType": { + "type": "string", + "enum": [ + "naf", + "rome", + "domain", + "granddomain" + ], + "title": "JobType", + "x-stoplight": { + "id": "8ha9wtlw536pv" + } + }, + "LocationItem": { + "properties": { + "type": { + "allOf": [ + { + "$ref": "#/components/schemas/LocationType" + } + ], + "title": "Type du lieu", + "description": "Il peut être de l'une de ces catégories:\n - city\n - region\n - department", + "examples": [ + "city" + ] + }, + "value": { + "type": "string", + "title": "Code du lieu", + "description": "En fonction du type du métier, cette valeur peut varier. Mais elle représente le code INSEE, le code région ou le code du département. ", + "examples": [ + "57463" + ] + }, + "display": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Nom du lieu", + "description": "Ceci est la dénomination du lieu ", + "default": "", + "examples": [ + "Metz" + ] + }, + "selection": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Autre Appellation du lieu", + "description": "Ce champ a été mis en place pour les besoins du site La Bonne Boite et peut être ignoré.", + "default": "", + "examples": [ + "" + ] + }, + "geo": { + "anyOf": [ + { + "$ref": "#/components/schemas/GeoCoords" + }, + { + "type": "null" + } + ], + "title": "Coordonnée Mairie", + "description": "Dans le cadre d'une recherche par code INSEE, c'est l'emplacement géographique de la mairie", + "examples": [ + { + "latitude": 49.1196, + "longitude": 6.1764 + } + ] + } + }, + "type": "object", + "required": [ + "type", + "value" + ], + "title": "LocationItem", + "example": { + "display": "Metz", + "geo": { + "latitude": 49.1196, + "longitude": 6.1764 + }, + "selection": "", + "type": "city", + "value": "57463" + }, + "x-stoplight": { + "id": "rm3xtyaev7mzc" + } + }, + "LocationType": { + "type": "string", + "enum": [ + "city", + "region", + "department" + ], + "title": "LocationType", + "x-stoplight": { + "id": "3hd6mvsv52x1o" + } + }, + "OfficeScoreResponse": { + "properties": { + "hits": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Nombre de résultats", + "description": "Nombre de résultats pour la recherche en cours", + "examples": [ + 150 + ] + }, + "items": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/OfficeScoreResponseItem" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Items" + } + }, + "type": "object", + "title": "OfficeScoreResponse", + "example": { + "hits": 1, + "items": [ + { + "city": "Paris", + "citycode": "75120", + "company_name": "POLE EMPLOI", + "department": "Paris", + "department_number": 75, + "headcount_max": "1999", + "headcount_min": "1000", + "hiring_potential": 91.38373304856015, + "id": 12905309, + "is_high_potential": true, + "location": { + "lat": 48.8778, + "lon": 2.40989 + }, + "naf": "8413Z", + "naf_label": "Administration publique (tutelle) des activités économiques", + "office_name": "", + "postcode": "75020", + "region": "Île-de-France", + "siret": "13000548100010" + } + ] + }, + "x-stoplight": { + "id": "rc09mfnehpl7t" + } + }, + "OfficeScoreResponseItem": { + "properties": { + "id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Id" + }, + "siret": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "SIRET", + "description": "Numéro de SIRET de l'entreprise." + }, + "company_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Nom", + "description": "Nom de l'entreprise", + "examples": [ + "Leclerc" + ] + }, + "office_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Nom Emplacement", + "description": "Nom d'emplacement de l'entreprise (Nom d'une agence ou nom d'une boutique).", + "examples": [ + "Leclerc Paridis" + ] + }, + "headcount_min": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Nombre d'employé minimum", + "description": "Nombre d'employé minimum de l'entreprise", + "examples": [ + 50 + ] + }, + "headcount_max": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Nombre d'employé maximum", + "description": "Nombre d'employé maximum de l'entreprise", + "examples": [ + 99 + ] + }, + "naf": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "NAF", + "description": "Code métier NAF associés aux entreprises. [Nomenclature d'activités française de l'Insee (rév. 2, 2008 - Niveau 2 - Liste des divisions)](https://www.insee.fr/fr/information/2406147)", + "examples": [ + "5610C" + ] + }, + "naf_label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label Naf", + "description": "Description du code NAF associés aux entreprises. [Nomenclature d'activités française de l'Insee (rév. 2, 2008 - Niveau 2 - Liste des divisions)](https://www.insee.fr/fr/information/2406147)", + "examples": [ + "Restauration de type rapide" + ] + }, + "location": { + "anyOf": [ + { + "$ref": "#/components/schemas/server__routes__office__schemas__GeoResponse" + }, + { + "type": "null" + } + ] + }, + "city": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Ville", + "description": "Nom exact de la ville", + "examples": [ + "Metz" + ] + }, + "citycode": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Code INSEE", + "description": "Code INSEE de la ville", + "examples": [ + "57463" + ] + }, + "postcode": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Code Postal", + "description": "Code postal de la ville", + "examples": [ + "57000" + ] + }, + "department": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Département", + "description": "Nom du département. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": [ + "Moselle" + ] + }, + "region": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Nom de la Région", + "description": "Nom de la région. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": [ + "Pays de la Loire" + ] + }, + "department_number": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Numéro de département", + "description": "Numéro du département. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": [ + 57 + ] + }, + "hiring_potential": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Potentiel d'embauche", + "description": "Potentiel d'embauche de l'entreprise entre 0 et 100. C'est une valeur transformée depuis les données fournies par ADS.\n\n- Si le mode de recherche est par code NAF alors le potentiel d'embauche est celui de l'entreprise\n- Sinon, le potentiel d'embauche est celui du code ROME pour ce NAF.", + "examples": [ + 74.2658 + ] + }, + "is_high_potential": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "A fort potentiel d'embauche", + "description": "Est ce que l'entreprise est considéré comme ayant un fort potentiel d'embauche.", + "examples": [ + true + ] + } + }, + "type": "object", + "title": "OfficeScoreResponseItem", + "x-stoplight": { + "id": "jx75ukj2pmt4w" + } + }, + "ResolvedSearchParams": { + "properties": { + "jobs": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/JobItem" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Jobs" + }, + "locations": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/LocationItem" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Locations" + } + }, + "type": "object", + "title": "ResolvedSearchParams", + "x-stoplight": { + "id": "ezi5157zh8vy6" + } + }, + "SearchCountResponse": { + "properties": { + "hits": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Nombre de résultats", + "description": "Nombre de résultats pour la recherche en cours", + "examples": [ + 151 + ] + }, + "params": { + "anyOf": [ + { + "$ref": "#/components/schemas/SearchParams" + }, + { + "type": "null" + } + ], + "title": "Paramètres de recherche utilisé", + "description": "Retour des paramètres utilisés pour effectuer la recherche." + }, + "resolved_params": { + "anyOf": [ + { + "$ref": "#/components/schemas/ResolvedSearchParams" + }, + { + "type": "null" + } + ], + "title": "Résolution de paramètres", + "description": "Certains paramètres font l'objet d'une résolution notamment pour les lieux et les métiers." + } + }, + "type": "object", + "title": "SearchCountResponse", + "x-stoplight": { + "id": "swzsni1awcemw" + } + }, + "SearchParams": { + "properties": { + "job": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Métier", + "description": "Recherche libre de métier. La recherche tentera de trouver une correspondance dans les libelles de:\n - rome\n - domain\n - granddomain\n - naf", + "default": [ + null + ], + "examples": [ + "Boul" + ] + }, + "domain": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Domaine", + "description": "Recherche par domaine d'activité professionnel", + "default": [ + null + ], + "examples": [ + "A14" + ] + }, + "granddomain": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Grand Domaine", + "description": "Recherche par grand domaine d'activité professionnel", + "default": [ + null + ], + "examples": [ + "A" + ] + }, + "rome": { + "items": { + "type": "string" + }, + "type": "array", + "title": "ROME", + "description": "Recherche par code ROME. Référentiel: [Fiche métier France Travail](https://www.francetravail.fr/candidat/decouvrir-le-marche-du-travail/les-fiches-metiers/les-fiches-metiers-sont-regroupe.html)\n ", + "default": [ + null + ], + "examples": [ + "D1102" + ] + }, + "naf": { + "items": { + "type": "string" + }, + "type": "array", + "title": "NAF", + "description": "Code métier NAF associés aux entreprises. [Nomenclature d'activités française de l'Insee (rév. 2, 2008 - Niveau 2 - Liste des divisions)](https://www.insee.fr/fr/information/2406147)", + "default": [ + null + ], + "examples": [ + "9499Z" + ] + }, + "location": { + "type": "string", + "title": "Lieu", + "description": "Recherche libre de lieu. La recherche tentera de trouver une correspondance dans les noms de villes, départements ou régions. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "default": [ + null + ], + "examples": [ + "Met" + ] + }, + "region": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Nom de la Région", + "description": "Nom de la région. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "default": [ + null + ], + "examples": [ + "Pays de la Loire" + ] + }, + "region_number": { + "items": { + "type": "integer" + }, + "type": "array", + "title": "Numéro de la Région", + "description": "Numéro de la région. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "default": [ + null + ], + "examples": [ + 32 + ] + }, + "department": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Département", + "description": "Nom du département. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "default": [ + null + ], + "examples": [ + "Moselle" + ] + }, + "department_number": { + "items": { + "type": "integer" + }, + "type": "array", + "title": "Numéro de département", + "description": "Numéro du département. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "default": [ + null + ], + "examples": [ + 57 + ] + }, + "city": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Ville", + "description": "Nom exact de la ville recherchée", + "default": [ + null + ], + "examples": [ + "Metz" + ] + }, + "citycode": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Code INSEE", + "description": "Code INSEE de la ville recherchée", + "default": [ + null + ], + "examples": [ + "57463" + ] + }, + "postcode": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Code Postal", + "description": "Code postal de la ville recherchée", + "default": [ + null + ], + "examples": [ + "57000" + ] + }, + "latitude": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Latitude", + "description": "Latitude du point géographique à proximité duquel on recherche des entreprises à fort potentiel d'embauche.\n\n Pour utiliser ce paramètre, il faut préciser obligatoirement `latitude`, `longitude`et `distance`", + "default": [ + null + ], + "examples": [ + 47.21837 + ] + }, + "longitude": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Longitude", + "description": "Longitude du point géographique à proximité duquel on recherche des entreprises à fort potentiel d'embauche.\n\n Pour utiliser ce paramètre, il faut préciser obligatoirement `latitude`, `longitude`et `distance`", + "default": [ + null + ], + "examples": [ + -1.55362 + ] + }, + "distance": { + "anyOf": [ + { + "type": "integer", + "exclusiveMinimum": 0 + }, + { + "type": "null" + } + ], + "title": "Distance", + "description": "Périmètre du rayon de recherche (en kilomètres).\n\nLongitude du point géographique à proximité duquel on recherche des entreprises à fort potentiel d'embauche.\n\n**Utilisation**:\nCe paramètre (en **km**) s'utilise en combinaison avec:\n\n- `latitude` & `longitude`\n- `citycode`\n\nSi les coordonnées `latitude` / `longitude` sont utilisées, il s'agit du rayon du cercle autour du point géographique défini par le couple\n`longitude` / `latitude`.\nSinon, une recherche est effectué autour des coordonnées géographique des mairies pour les villes dans la recherche (citycode).\n\nLa distance doit être comprise entre ] 0, 200km [", + "default": [ + null + ], + "examples": [ + 25 + ], + "lte": 200 + }, + "bbox": { + "type": "string", + "title": "BBOX", + "description": "Ce paramètre permet de définir un rectangle géographique pour définir la zone de recherche.\n\n**Référentiel**: https://wiki.openstreetmap.org/wiki/Bounding_box\n\n**Utilisation**:\nPour utiliser ce paramètre, il faut préciser obligatoirement 4 valeurs séparées par des `|` :\n\n left|bottom|right|top\n\n - left: longitude du bord gauche\n - bottom: latitude du bord en bas\n - right: longitude du bord droit\n - top: latitude du bord en haut", + "default": [ + null + ], + "examples": [ + "-1.5|47.2|-1.6|47.3" + ] + } + }, + "type": "object", + "title": "SearchParams", + "example": { + "citycode": [ + "57463" + ], + "department": [ + "" + ], + "page": 1, + "page_size": 2, + "postcode": [ + "44000" + ], + "rome": [ + "D1102" + ], + "sort_by": "", + "sort_direction": "" + }, + "x-stoplight": { + "id": "bdpg41zmhrpc1" + } + }, + "SearchResponse": { + "properties": { + "hits": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Nombre de résultats", + "description": "Nombre de résultats pour la recherche en cours", + "examples": [ + 151 + ] + }, + "params": { + "anyOf": [ + { + "$ref": "#/components/schemas/SearchParams" + }, + { + "type": "null" + } + ], + "title": "Paramètres de recherche utilisé", + "description": "Retour des paramètres utilisés pour effectuer la recherche." + }, + "resolved_params": { + "anyOf": [ + { + "$ref": "#/components/schemas/ResolvedSearchParams" + }, + { + "type": "null" + } + ], + "title": "Résolution de paramètres", + "description": "Certains paramètres font l'objet d'une résolution notamment pour les lieux et les métiers." + }, + "items": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/SearchResponseItem" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Items" + } + }, + "type": "object", + "title": "SearchResponse", + "x-stoplight": { + "id": "y1qhs0gn4sv74" + } + }, + "SearchResponseItem": { + "properties": { + "rome": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Métier", + "description": "Code rome", + "examples": [ + "D1102" + ] + }, + "id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Id", + "description": "Id de l'entreprise", + "examples": [ + 4636621 + ] + }, + "siret": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "SIRET", + "description": "Numéro de SIRET de l'entreprise.", + "examples": [ + "30509416100034" + ] + }, + "company_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Nom", + "description": "Nom de l'entreprise", + "examples": [ + "MAISON NICOLAS" + ] + }, + "office_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Nom Emplacement", + "description": "Nom d'emplacement de l'entreprise (Nom d'une agence ou nom d'une boutique).", + "examples": [ + "MAISON NICOLAS" + ] + }, + "headcount_min": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Nombre d'employé minimum", + "description": "Nombre d'employé minimum de l'entreprise", + "examples": [ + 3 + ] + }, + "headcount_max": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Nombre d'employé maximum", + "description": "Nombre d'employé maximum de l'entreprise", + "examples": [ + 5 + ] + }, + "naf": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "NAF", + "description": "Code métier NAF associés aux entreprises. [Nomenclature d'activités française de l'Insee (rév. 2, 2008 - Niveau 2 - Liste des divisions)](https://www.insee.fr/fr/information/2406147)", + "examples": [ + "4781Z" + ] + }, + "naf_label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label Naf", + "description": "Description du code NAF associés aux entreprises. [Nomenclature d'activités française de l'Insee (rév. 2, 2008 - Niveau 2 - Liste des divisions)](https://www.insee.fr/fr/information/2406147)", + "examples": [ + "Commerce de détail alimentaire sur éventaires et marchés" + ] + }, + "location": { + "anyOf": [ + { + "$ref": "#/components/schemas/server__routes__search__schemas__GeoResponse" + }, + { + "type": "null" + } + ] + }, + "city": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Ville", + "description": "Nom exact de la ville", + "examples": [ + "Metz" + ] + }, + "citycode": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Code INSEE", + "description": "Code INSEE de la ville", + "examples": [ + "57463" + ] + }, + "postcode": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Code Postal", + "description": "Code postal de la ville", + "examples": [ + "57000" + ] + }, + "department": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Département", + "description": "Nom du département. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": [ + "Moselle" + ] + }, + "region": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Nom de la Région", + "description": "Nom de la région. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": [ + "Grand Est" + ] + }, + "department_number": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Numéro de département", + "description": "Numéro du département. Les noms des villes, département et régions proviennent de [geo.api.gouv.fr](https://geo.api.gouv.fr/)", + "examples": [ + "57" + ] + }, + "hiring_potential": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Potentiel d'embauche", + "description": "Potentiel d'embauche de l'entreprise entre 0 et 100. C'est une valeur transformée depuis les données fournies par ADS.\n\n- Si le mode de recherche est par code NAF alors le potentiel d'embauche est celui de l'entreprise\n- Sinon, le potentiel d'embauche est celui du code ROME pour ce NAF." + }, + "is_high_potential": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "A fort potentiel d'embauche", + "description": "Longitude de l'entreprise.", + "examples": [ + true + ] + } + }, + "type": "object", + "title": "SearchResponseItem", + "example": { + "city": "Metz", + "citycode": "57463", + "company_name": "MAISON NICOLAS", + "department": "Moselle", + "department_number": 57, + "headcount_max": "5", + "headcount_min": "3", + "hiring_potential": 2.4201609999999993, + "id": 4636621, + "is_high_potential": false, + "location": { + "lat": 49.1196, + "lon": 6.17373 + }, + "naf": "4781Z", + "naf_label": "Commerce de détail alimentaire sur éventaires et marchés", + "office_name": "", + "postcode": "57000", + "region": "Grand Est", + "rome": "D1102", + "siret": "30509416100034" + }, + "x-stoplight": { + "id": "vogsnhyf6jq7n" + } + }, + "ValidationErrorDetail": { + "properties": { + "param": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Paramètre en erreur", + "description": "Emplacement dans le schéma du paramètre en erreur", + "examples": [ + "distance" + ] + }, + "message": { + "type": "string", + "title": "Message", + "description": "Message décrivant l'erreur", + "examples": [ + "distance parameter cannot be above 200km" + ] + } + }, + "type": "object", + "required": [ + "param", + "message" + ], + "title": "ValidationErrorDetail", + "x-stoplight": { + "id": "l6ict780t8asn" + } + }, + "server__routes__office__schemas__GeoResponse": { + "properties": { + "lat": { + "type": "number", + "title": "Latitude", + "description": "Latitude de l'entreprise.", + "examples": [ + 47.21837 + ] + }, + "lon": { + "type": "number", + "title": "Longitude", + "description": "Longitude de l'entreprise.", + "examples": [ + -1.55362 + ] + } + }, + "type": "object", + "required": [ + "lat", + "lon" + ], + "title": "GeoResponse", + "x-stoplight": { + "id": "nb1zrir78vg2k" + } + }, + "server__routes__search__schemas__GeoResponse": { + "properties": { + "lat": { + "type": "number", + "title": "Latitude", + "description": "Latitude de l'entreprise.", + "examples": [ + 49.1196 + ] + }, + "lon": { + "type": "number", + "title": "Longitude", + "description": "Longitude de l'entreprise.", + "examples": [ + 6.1764 + ] + } + }, + "type": "object", + "required": [ + "lat", + "lon" + ], + "title": "GeoResponse", + "example": { + "lat": 49.1196, + "lon": 6.1764 + }, + "x-stoplight": { + "id": "ob2yrovz1rfgs" + } + } + } + } +} \ No newline at end of file diff --git a/backend/api/marche_du_travail_bundled.json b/backend/api/marche_du_travail_bundled.json new file mode 100644 index 0000000..ea6e3f0 --- /dev/null +++ b/backend/api/marche_du_travail_bundled.json @@ -0,0 +1,3405 @@ +{ + "openapi": "3.0.1", + "info": { + "version": "1", + "title": "Marché du travail", + "description": "Accédez aux statistiques de France Travail - Marché du travail. \r\n\r\nCette API vous fournit toutes les données statistiques essentielles de France Travail pour bien évaluer la situation de l'emploi sur un territoire: chiffres des demandeurs d'emploi, offres, embauches. Elle intègre des indicateurs clés développés par France Travail vous permettant de comprendre les tensions sur les métiers, ainsi que la dynamique globale d'un territoire.\r\n\r\n**Scopes :** `api_stats-offres-demandes-emploiv1`,`offresetdemandesemploi`\r\n\r\n**Royaume :** `/partenaire`" + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ], + "paths": { + "/v1/indicateur/stat-demandeurs": { + "post": { + "tags": [ + "Demandeurs" + ], + "summary": "Stats des demandeurs d'emploi inscrits en fin de trimestre (DE_1)", + "description": "Permet de rechercher les données statistiques sur le Nombre de demandeurs d'emploi inscrits en fin de trimestre par métier et par compétence (DE_1), selon des critères obligatoires (territoire, activité) et facultatifs (catégories de candidats, périodes, caractéristiques).", + "operationId": "rechercherStatDemandeurs", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CritereIndicateurAvecNomenclature" + }, + "examples": { + "default": { + "value": { + "codeTypeTerritoire": "REG", + "codeTerritoire": "75", + "codeTypeActivite": "ROME", + "codeActivite": "A1203", + "codeTypePeriode": "TRIMESTRE", + "codeTypeNomenclature": "CATCAND" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Statistiques demandeurs d'emploi trouvées", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/IndicateurRetour" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndicateurRetour" + } + } + } + }, + "400": { + "description": "Les paramètres en entrée ne sont pas valides" + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ] + } + }, + "/v1/indicateur/stat-demandeurs-entrant": { + "post": { + "tags": [ + "Demandeurs" + ], + "summary": "Stats des demandeurs d'emploi nouveaux inscrits au cours du trimestre et des 12 derniers mois (DE_5)", + "description": "Permet de rechercher les données statistiques sur le Nombre de demandeurs d'emploi nouveaux inscrits au cours du trimestre et des 12 derniers mois, par métier (DE_5), selon des critères obligatoires (territoire, activité) et facultatifs (nomenclature, périodes, caractéristiques).", + "operationId": "rechercherStatDemandeursEntrants", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CritereIndicateurAvecNomenclature" + }, + "examples": { + "default": { + "value": { + "codeTypeTerritoire": "REG", + "codeTerritoire": "75", + "codeTypeActivite": "ROME", + "codeActivite": "A1203", + "codeTypePeriode": "TRIMESTRE", + "codeTypeNomenclature": "CATCAND" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Statistiques demandeurs d'emploi trouvées", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/IndicateurRetour" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndicateurRetour" + } + } + } + }, + "400": { + "description": "Les paramètres en entrée ne sont pas valides" + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ] + } + }, + "/v1/indicateur/stat-dynamique-emploi": { + "post": { + "tags": [ + "Dynamique Emploi" + ], + "summary": "Stats sur l'Indicateur global de dynamique de l’emploi sur le territoire sélectionné (DYN_1)", + "description": "Permet de rechercher les données statistiques sur l'Indicateur global de dynamique de l’emploi sur le territoire sélectionné (DYN_1), selon des critères obligatoires (territoire, activité) et facultatifs (périodes). Particularités de cet indicateur : pas de caractéristique.", + "operationId": "rechercherStatDynamiqueEmploi", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CritereIndicateurSansNomenclature" + }, + "examples": { + "default": { + "value": { + "codeTypeTerritoire": "REG", + "codeTerritoire": "75", + "codeTypeActivite": "MOYENNE", + "codeActivite": "MOYENNE", + "codeTypePeriode": "TRIMESTRE" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Statistiques dynamisme de l'emploi trouvées", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/IndicateurRetour" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndicateurRetour" + } + } + } + }, + "400": { + "description": "Les paramètres en entrée ne sont pas valides" + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ] + } + }, + "/v1/indicateur/stat-embauches": { + "post": { + "tags": [ + "Embauches" + ], + "summary": "Stats sur les embauches (EMB_1)", + "description": "Permet de rechercher les données statistiques sur les Embauches par métier recherché pour les demandeurs d'emploi et par secteur (EMB_1) selon des critères obligatoires (territoire, activité) et facultatifs (Catégories de candidat, durée d’emploi, périodes, caractéristiques).", + "operationId": "rechercherStatEmbauches", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CritereIndicateurAvecNomenclature" + }, + "examples": { + "default": { + "value": { + "codeTypeTerritoire": "REG", + "codeTerritoire": "75", + "codeTypeActivite": "ROME", + "codeActivite": "A1203", + "codeTypePeriode": "TRIMESTRE", + "codeTypeNomenclature": "CATCANDxDUREEEMP" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Statistiques sur les embauches trouvées", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/IndicateurRetour" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndicateurRetour" + } + } + } + }, + "400": { + "description": "Les paramètres en entrée ne sont pas valides" + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ] + } + }, + "/v1/indicateur/stat-offres": { + "post": { + "tags": [ + "Offres" + ], + "summary": "Stats sur les offres d'emploi (OFF_1)", + "description": "Permet de rechercher les données statistiques sur les Offres enregistrées au cours du trimestre et des 12 derniers mois par métier, secteur et compétence (OFF_1) selon des critères obligatoires (territoire, activité) et facultatifs (origine des offres, périodes, caractéristiques).", + "operationId": "rechercherStatOffres", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CritereIndicateurAvecNomenclature" + }, + "examples": { + "default": { + "value": { + "codeTypeTerritoire": "REG", + "codeTerritoire": "75", + "codeTypeActivite": "ROME", + "codeActivite": "A1203", + "codeTypePeriode": "TRIMESTRE", + "codeTypeNomenclature": "ORIGINEOFF" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Statistiques des offres d'emploi trouvées", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/IndicateurRetour" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndicateurRetour" + } + } + } + }, + "400": { + "description": "Les paramètres en entrée ne sont pas valides" + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ] + } + }, + "/v1/indicateur/stat-perspective-employeur": { + "post": { + "tags": [ + "Perspectives Recrutement" + ], + "summary": "Stats sur les difficultés de recrutement (indicateur de tension) (PERSP_2)", + "description": "Permet de rechercher les données statistiques sur les difficultés de recrutement (indicateur de tension) par métier (PERSP_2), selon des critères obligatoires (territoire, activité) et facultatifs (périodes). Particularités de cet indicateur : pas de caractéristique.", + "operationId": "rechercherStatPerspectivesEmployeur", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CritereIndicateurAvecNomenclature" + }, + "examples": { + "default": { + "value": { + "codeTypeTerritoire": "REG", + "codeTerritoire": "75", + "codeTypeActivite": "ROME", + "codeActivite": "A1203", + "codeTypePeriode": "ANNEE", + "codeTypeNomenclature": "TYPE_TENSION" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Statistiques des difficultés de recrutement trouvées", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/IndicateurRetour" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndicateurRetour" + } + } + } + }, + "400": { + "description": "Les paramètres en entrée ne sont pas valides" + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ] + } + }, + "/v1/indicateur/salaire-rome-fap/{codeTypeTerritoire}/{codeTerritoire}": { + "get": { + "tags": [ + "Salaries" + ], + "summary": "Stats sur les salariés en poste par typologie de salaire (SAL_3)", + "description": "Permet de rechercher les données statistiques sur les montants des salaires en poste (SAL_3), selon des critères obligatoires (territoire, ROME).", + "operationId": "rechercherStatSalairesParMetier", + "parameters": [ + { + "name": "codeRome", + "in": "query", + "description": "Code ROME", + "schema": { + "type": "string", + "example": "A1101" + }, + "examples": { + "default": { + "value": "A1101" + } + } + }, + { + "name": "codeTypeTerritoire", + "in": "path", + "description": "Code du type de territoire", + "required": true, + "schema": { + "type": "string", + "example": "NAT" + }, + "examples": { + "default": { + "value": "NAT" + } + } + }, + { + "name": "codeTerritoire", + "in": "path", + "description": "Code du territoire", + "required": true, + "schema": { + "type": "string", + "example": "FR" + }, + "examples": { + "default": { + "value": "FR" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ], + "responses": { + "200": { + "description": "Statistiques salaires en poste trouvées", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/IndicateurRetour" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndicateurRetour" + } + } + } + }, + "400": { + "description": "Les paramètres en entrée ne sont pas valides" + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ] + } + }, + "/v1/referentiel/activite": { + "get": { + "tags": [ + "Activite" + ], + "summary": "Consulter une activité", + "description": "Permet de consulter une activité du Référentiel Smart Emploi selon des critères obligatoires (code type activité et code activité).", + "operationId": "recupererActiviteParCodeActiviteEtCodeTypeActivite", + "parameters": [ + { + "name": "codeActivite", + "in": "query", + "description": "codeActivite", + "required": true, + "schema": { + "type": "string", + "example": "A1203" + }, + "examples": { + "default": { + "value": "A1203" + } + } + }, + { + "name": "codeTypeActivite", + "in": "query", + "description": "codeTypeActivite", + "required": true, + "schema": { + "type": "string", + "example": "ROME" + }, + "examples": { + "default": { + "value": "ROME" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ], + "responses": { + "200": { + "description": "Retourne une activité", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Activite" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Activite" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ] + } + }, + "/v1/referentiel/activites": { + "get": { + "tags": [ + "Activite" + ], + "summary": "Lister les activités", + "description": "Permet de lister les activités du Référentiel Smart Emploi.", + "operationId": "recupererListeActivite", + "responses": { + "200": { + "description": "Retourne la liste d'activités", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeActivite" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeActivite" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ] + } + }, + "/v1/referentiel/activites/{codeTypeActivite}": { + "get": { + "tags": [ + "Activite" + ], + "summary": "Lister les activités pour un type d'activité", + "description": "Permet de lister les activités du Référentiel Smart Emploi pour un type d'activité.", + "operationId": "recupererListeActiviteParCodeTypeActivite", + "parameters": [ + { + "name": "filtreActivite", + "in": "query", + "description": "filtreActivite", + "schema": { + "type": "string", + "example": "A12" + }, + "examples": { + "default": { + "value": "A12" + } + } + }, + { + "name": "codeTypeActivite", + "in": "path", + "description": "codeTypeActivite", + "required": true, + "schema": { + "type": "string", + "example": "ROME" + }, + "examples": { + "default": { + "value": "ROME" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste d'activités", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeActivite" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeActivite" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ] + } + }, + "/v1/referentiel/type-activites": { + "get": { + "tags": [ + "Activite" + ], + "summary": "Lister les types d'activité", + "description": "Permet de lister les types d'activité du Référentiel Smart Emploi.", + "operationId": "recupererListeTypeActivite", + "responses": { + "200": { + "description": "Retourne la liste des types d'activités", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeTypeActivite" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeTypeActivite" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ] + } + }, + "/v1/referentiel/type-activite/{codeTypeActivite}": { + "get": { + "tags": [ + "Activite" + ], + "summary": "Consulter un type d'activité", + "description": "Permet de consulter un type d'activité du Référentiel Smart Emploi.", + "operationId": "recupererTypeActiviteParCodeTypeActivite", + "parameters": [ + { + "name": "codeTypeActivite", + "in": "path", + "description": "codeTypeActivite", + "required": true, + "schema": { + "type": "string", + "example": "ROME" + }, + "examples": { + "default": { + "value": "ROME" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ], + "responses": { + "200": { + "description": "Retourne le type d'activité", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/TypeActivite" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/TypeActivite" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ] + } + }, + "/v1/referentiel/caracteristique": { + "get": { + "tags": [ + "Caracteristique" + ], + "summary": "Consulter une caractéristique", + "description": "Permet de consulter une caractéristique du Référentiel Smart Emploi selon des critères obligatoires (code type caractéristique et code caractéristique).", + "operationId": "recupererCaracteristiqueParCodeCaracteristiqueEtCodeTypeCaracteristique", + "parameters": [ + { + "name": "codeCaracteristique", + "in": "query", + "description": "codeCaracteristique", + "required": true, + "schema": { + "type": "string", + "example": "H" + }, + "examples": { + "default": { + "value": "H" + } + } + }, + { + "name": "codeTypeCaracteristique", + "in": "query", + "description": "codeTypeCaracteristique", + "required": true, + "schema": { + "type": "string", + "example": "GENRE" + }, + "examples": { + "default": { + "value": "GENRE" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ], + "responses": { + "200": { + "description": "Retourne la caractéristique", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Caracteristique" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Caracteristique" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ] + } + }, + "/v1/referentiel/caracteristiques": { + "get": { + "tags": [ + "Caracteristique" + ], + "summary": "Lister les caractéristiques", + "description": "Permet de lister les caractéristiques du Référentiel Smart Emploi.", + "operationId": "recupererListeCaracteristique", + "responses": { + "200": { + "description": "Retourne la liste des caractéristiques", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeCaracteristique" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeCaracteristique" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ] + } + }, + "/v1/referentiel/caracteristiques/{codeTypeCaracteristique}": { + "get": { + "tags": [ + "Caracteristique" + ], + "summary": "Lister les caractéristiques par type d'activité", + "description": "Permet de lister les caractéristiques du Référentiel Smart Emploi pour un type de caractéristique.", + "operationId": "recupererListeCaracteristiqueParCodeTypeCaracteristique", + "parameters": [ + { + "name": "codeTypeCaracteristique", + "in": "path", + "description": "codeTypeCaracteristique", + "required": true, + "schema": { + "type": "string", + "example": "GENRE" + }, + "examples": { + "default": { + "value": "GENRE" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des caractéristiques", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeCaracteristique" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeCaracteristique" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ] + } + }, + "/v1/referentiel/type-caracteristiques": { + "get": { + "tags": [ + "Caracteristique" + ], + "summary": "Lister les types de caractéristique", + "description": "Permet de lister les types de caractéristique du Référentiel Smart Emploi.", + "operationId": "recupererListeTypeCaracteristique", + "responses": { + "200": { + "description": "Retourne la liste des types de caractéristiques", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeTypeCaracteristique" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeTypeCaracteristique" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ] + } + }, + "/v1/referentiel/type-caracteristique/{codeTypeCaracteristique}": { + "get": { + "tags": [ + "Caracteristique" + ], + "summary": "Consulter un type de caractéristique", + "description": "Permet de consulter un type de caractéristique du Référentiel Smart Emploi.", + "operationId": "recupererTypeCaracteristiqueParCodeTypeCaracteristique", + "parameters": [ + { + "name": "codeTypeCaracteristique", + "in": "path", + "description": "codeTypeCaracteristique", + "required": true, + "schema": { + "type": "string", + "example": "GENRE" + }, + "examples": { + "default": { + "value": "GENRE" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ], + "responses": { + "200": { + "description": "Retourne un type de caractéristique", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/TypeCaracteristique" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/TypeCaracteristique" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ] + } + }, + "/v1/referentiel/details-indicateurs": { + "get": { + "tags": [ + "Catalogue Indicateur" + ], + "summary": "Consulter le détail d'un indicateur.", + "description": "Permet de lister toutes les valeurs possibles des critères d’entrée (Types de territoire, Types d'activité, Type de période, Nomenclatures, Croisements disponibles, Caractéristiques), et des Types de valeur obtenus, pour un indicateur donné. Un croisement disponible correspond à une combinaison [Type de territoire, Type d'activité, Type de période et Nomenclature].", + "operationId": "recupererDetailsIndicateurs", + "parameters": [ + { + "name": "codeFamille", + "in": "query", + "description": "codeFamille", + "schema": { + "type": "string", + "example": "DEMANDEURS" + }, + "examples": { + "default": { + "value": "DEMANDEURS" + } + } + }, + { + "name": "codeIndicateur", + "in": "query", + "description": "codeIndicateur", + "schema": { + "type": "string", + "example": "DE_1" + }, + "examples": { + "default": { + "value": "DE_1" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ], + "responses": { + "200": { + "description": "Détail d'un indicateur", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeDetailIndicateur" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeDetailIndicateur" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ] + } + }, + "/v1/referentiel/famille-indicateur/{codeFamilleIndicateur}": { + "get": { + "tags": [ + "Catalogue Indicateur" + ], + "summary": "Consulter une famille d'indicateur", + "operationId": "recupererFamilleIndicateurParCodeFamilleIndicateur", + "parameters": [ + { + "name": "codeFamilleIndicateur", + "in": "path", + "description": "codeFamilleIndicateur", + "required": true, + "schema": { + "type": "string", + "example": "DEMANDEURS" + }, + "examples": { + "default": { + "value": "DEMANDEURS" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ], + "responses": { + "default": { + "description": "default response", + "content": { + "application/xml": {}, + "application/json": {} + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ] + } + }, + "/v1/referentiel/familles-indicateurs": { + "get": { + "tags": [ + "Catalogue Indicateur" + ], + "summary": "Lister les familles d'indicateur", + "operationId": "recupererListeFamilleIndicateur", + "responses": { + "default": { + "description": "default response", + "content": { + "application/xml": {}, + "application/json": {} + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ] + } + }, + "/v1/referentiel/indicateurs": { + "get": { + "tags": [ + "Catalogue Indicateur" + ], + "summary": "Lister les indicateurs", + "operationId": "recupererListeIndicateur", + "responses": { + "default": { + "description": "default response", + "content": { + "application/xml": {}, + "application/json": {} + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ] + } + }, + "/v1/referentiel/nomenclatures": { + "get": { + "tags": [ + "Nomenclature" + ], + "summary": "Lister les nomenclatures", + "description": "Permet de lister les nomenclatures du Référentiel Smart Emploi.", + "operationId": "recupererListeNomenclature", + "responses": { + "200": { + "description": "Retourne la liste des nomenclatures", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeNomenclature" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeNomenclature" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ] + } + }, + "/v1/referentiel/nomenclatures/{codeTypeNomenclature}": { + "get": { + "tags": [ + "Nomenclature" + ], + "summary": "Lister les nomenclatures par type de nomenclature", + "description": "Permet de lister les nomenclatures du Référentiel Smart Emploi pour un type de nomenclature.", + "operationId": "recupererListeNomenclatureParCodeTypeNomenclature", + "parameters": [ + { + "name": "codeTypeNomenclature", + "in": "path", + "description": "codeTypeNomenclature", + "required": true, + "schema": { + "type": "string", + "example": "CATCAND" + }, + "examples": { + "default": { + "value": "CATCAND" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des nomenclatures", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeNomenclature" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeNomenclature" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ] + } + }, + "/v1/referentiel/type-nomenclatures": { + "get": { + "tags": [ + "Nomenclature" + ], + "summary": "Lister les types nomenclatures", + "description": "Permet de lister les types de nomenclature du Référentiel Smart Emploi.", + "operationId": "recupererListeTypeNomenclature", + "responses": { + "200": { + "description": "Retourne la liste des types nomenclatures", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeTypeNomenclature" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeTypeNomenclature" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ] + } + }, + "/v1/referentiel/nomenclature": { + "get": { + "tags": [ + "Nomenclature" + ], + "summary": "Consulter une nomenclature", + "description": "Permet de consulter une nomenclature du Référentiel Smart Emploi selon des critères obligatoires (code type nomenclature et code nomenclature).", + "operationId": "recupererNomenclatureParCodeNomenclatureEtCodeTypeNomenclature", + "parameters": [ + { + "name": "codeNomenclature", + "in": "query", + "description": "codeNomenclature", + "required": true, + "schema": { + "type": "string", + "example": "A" + }, + "examples": { + "default": { + "value": "A" + } + } + }, + { + "name": "codeTypeNomenclature", + "in": "query", + "description": "codeTypeNomenclature", + "required": true, + "schema": { + "type": "string", + "example": "CATCAND" + }, + "examples": { + "default": { + "value": "CATCAND" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ], + "responses": { + "200": { + "description": "Retourne la nomenclature", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Nomenclature" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Nomenclature" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ] + } + }, + "/v1/referentiel/type-nomenclature/{codeTypeNomenclature}": { + "get": { + "tags": [ + "Nomenclature" + ], + "summary": "Consulter un type de nomenclature", + "description": "Permet de consulter un type de nomenclature du Référentiel Smart Emploi.", + "operationId": "recupererTypeNomenclatureParCodeTypeNomenclature", + "parameters": [ + { + "name": "codeTypeNomenclature", + "in": "path", + "description": "codeTypeNomenclature", + "required": true, + "schema": { + "type": "string", + "example": "CATCAND" + }, + "examples": { + "default": { + "value": "CATCAND" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ], + "responses": { + "200": { + "description": "Retourne le type nomenclature", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/TypeNomenclature" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/TypeNomenclature" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ] + } + }, + "/v1/referentiel/periodes": { + "get": { + "tags": [ + "Periode" + ], + "summary": "Lister les périodes", + "description": "Permet de lister les périodes du Référentiel Smart Emploi.", + "operationId": "recupererListePeriode", + "responses": { + "200": { + "description": "Retourne la liste des périodes", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListePeriode" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListePeriode" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ] + } + }, + "/v1/referentiel/periodes/{codeTypePeriode}": { + "get": { + "tags": [ + "Periode" + ], + "summary": "Lister les périodes par type de période", + "description": "Permet de lister les périodes du Référentiel Smart Emploi pour un type de période.", + "operationId": "recupererListePeriodeParCodeTypePeriode", + "parameters": [ + { + "name": "codePeriode", + "in": "query", + "description": "codePeriode", + "schema": { + "type": "string", + "example": 2019 + }, + "examples": { + "default": { + "value": 2019 + } + } + }, + { + "name": "nbPeriode", + "in": "query", + "description": "nbPeriode", + "schema": { + "type": "integer", + "format": "int32", + "example": 5 + }, + "examples": { + "default": { + "value": 5 + } + } + }, + { + "name": "critereTemporel", + "in": "query", + "description": "critereTemporel", + "schema": { + "type": "string", + "example": "A" + }, + "examples": { + "default": { + "value": "A" + } + } + }, + { + "name": "codeTypePeriode", + "in": "path", + "description": "codeTypePeriode", + "required": true, + "schema": { + "type": "string", + "example": "ANNEE" + }, + "examples": { + "default": { + "value": "ANNEE" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des périodes", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListePeriode" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListePeriode" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ] + } + }, + "/v1/referentiel/type-periodes": { + "get": { + "tags": [ + "Periode" + ], + "summary": "Lister les types périodes", + "description": "Permet de lister les types de période du Référentiel Smart Emploi.", + "operationId": "recupererListeTypePeriode", + "responses": { + "200": { + "description": "Retourne la liste des types de période", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeTypePeriode" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeTypePeriode" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ] + } + }, + "/v1/referentiel/periode": { + "get": { + "tags": [ + "Periode" + ], + "summary": "Consulter une période", + "description": "Permet de consulter une période du Référentiel Smart Emploi selon des critères obligatoires (code type période et code période).", + "operationId": "recupererPeriodeParCodePeriodeEtCodeTypePeriode", + "parameters": [ + { + "name": "codePeriode", + "in": "query", + "description": "codePeriode", + "required": true, + "schema": { + "type": "string", + "example": 2019 + }, + "examples": { + "default": { + "value": 2019 + } + } + }, + { + "name": "codeTypePeriode", + "in": "query", + "description": "codeTypePeriode", + "required": true, + "schema": { + "type": "string", + "example": "ANNEE" + }, + "examples": { + "default": { + "value": "ANNEE" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ], + "responses": { + "200": { + "description": "Retourne la période", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Periode" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Periode" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ] + } + }, + "/v1/referentiel/type-periode/{codeTypePeriode}": { + "get": { + "tags": [ + "Periode" + ], + "summary": "Consulter un type de période", + "description": "Permet de consulter un type de période du Référentiel Smart Emploi.", + "operationId": "recupererTypePeriodeParCodeTypePeriode", + "parameters": [ + { + "name": "codeTypePeriode", + "in": "path", + "description": "codeTypePeriode", + "required": true, + "schema": { + "type": "string", + "example": "ANNEE" + }, + "examples": { + "default": { + "value": "ANNEE" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ], + "responses": { + "200": { + "description": "Retourne le type de période", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/TypePeriode" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/TypePeriode" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ] + } + }, + "/v1/referentiel/rechercherActivitesRomeFap": { + "get": { + "tags": [ + "RomeFap" + ], + "summary": "Référentiel des correspondances ROME/FAP", + "description": "Permet de rechercher les FAP associées à un code ROME.", + "operationId": "recupererListeTypeTerritoire_1", + "parameters": [ + { + "name": "codeRome", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste ROME/FAP", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeRomeFap" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeRomeFap" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ] + } + }, + "/v1/referentiel/territoires": { + "get": { + "tags": [ + "Territoire" + ], + "summary": "Lister les territoires", + "description": "Permet de lister les territoires du Référentiel Smart Emploi.", + "operationId": "recupererListeTerritoire", + "responses": { + "200": { + "description": "Retourne la liste des territoires", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeTerritoire" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeTerritoire" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ] + } + }, + "/v1/referentiel/territoires/{codeTypeTerritoire}": { + "get": { + "tags": [ + "Territoire" + ], + "summary": "Lister les territoires par type de territoire", + "description": "Permet de lister les territoires du Référentiel Smart Emploi pour un type de territoire.", + "operationId": "recupererListeTerritoireParCodeTypeTerritoire", + "parameters": [ + { + "name": "filtreTerritoire", + "in": "query", + "description": "filtreTerritoire", + "schema": { + "type": "string", + "example": "G" + }, + "examples": { + "default": { + "value": "G" + } + } + }, + { + "name": "codeTypeTerritoire", + "in": "path", + "description": "codeTypeTerritoire", + "required": true, + "schema": { + "type": "string", + "example": "DEP" + }, + "examples": { + "default": { + "value": "DEP" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des territoires pour un type", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeTerritoire" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeTerritoire" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ] + } + }, + "/v1/referentiel/type-territoires": { + "get": { + "tags": [ + "Territoire" + ], + "summary": "Lister les types de territoire", + "description": "Permet de lister les types de territoire du Référentiel Smart Emploi.", + "operationId": "recupererListeTypeTerritoire_2", + "responses": { + "200": { + "description": "Retourne la liste des types de territoire", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeTypeTerritoire" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeTypeTerritoire" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ] + } + }, + "/v1/referentiel/territoire": { + "get": { + "tags": [ + "Territoire" + ], + "summary": "Consulter un territoire", + "description": "Permet de consulter un territoire du Référentiel Smart Emploi selon des critères obligatoires (code type territoire et code territoire).", + "operationId": "recupererTerritoireParCodeTerritoireEtCodeTypeTerritoire", + "parameters": [ + { + "name": "codeTerritoire", + "in": "query", + "description": "codeTerritoire", + "required": true, + "schema": { + "type": "string", + "example": 33 + }, + "examples": { + "default": { + "value": 33 + } + } + }, + { + "name": "codeTypeTerritoire", + "in": "query", + "description": "codeTypeTerritoire", + "required": true, + "schema": { + "type": "string", + "example": "DEP" + }, + "examples": { + "default": { + "value": "DEP" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ], + "responses": { + "200": { + "description": "Retourne le territoire", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Territoire" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Territoire" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ] + } + }, + "/v1/referentiel/territoires-communes/{codeTypeTerritoire}": { + "get": { + "tags": [ + "Territoire" + ], + "summary": "Lister les communes avec Bassin et EPCI", + "operationId": "recupererTerritoireParCodeTypeAvecCommuneBassinEtEPCI", + "parameters": [ + { + "name": "filtreTerritoire", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "codeTypeTerritoire", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ], + "responses": { + "default": { + "description": "default response", + "content": { + "application/xml": {}, + "application/json": {} + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ] + } + }, + "/v1/referentiel/type-territoire/{codeTypeTerritoire}": { + "get": { + "tags": [ + "Territoire" + ], + "summary": "Consulter un type de territoire", + "description": "Permet de consulter un type de territoire du Référentiel Smart Emploi.", + "operationId": "recupererTypeTerritoireParCodeTypeTerritoire", + "parameters": [ + { + "name": "codeTypeTerritoire", + "in": "path", + "description": "codeTypeTerritoire", + "required": true, + "schema": { + "type": "string", + "example": "DEP" + }, + "examples": { + "default": { + "value": "DEP" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 5CVGwLp6FUlfJL_XXeEy8M76J2Q" + } + } + ], + "responses": { + "200": { + "description": "Retourne le type de territoire", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/TypeTerritoire" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/TypeTerritoire" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-offres-demandes-emploi" + } + ] + } + } + }, + "components": { + "schemas": { + "CritereIndicateurAvecNomenclature": { + "type": "object", + "properties": { + "codeTypeTerritoire": { + "type": "string", + "description": "Le type de territoire (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "DEP" + }, + "codeTerritoire": { + "type": "string", + "description": "Le code du territoire (voir le référentiel Territoire pour les codes disponibles)", + "example": "33" + }, + "codeTypeActivite": { + "type": "string", + "description": "Le type d'activité (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "ROME" + }, + "codeActivite": { + "type": "string", + "description": "Le code d'activité (voir le référentiel Activite pour les codes disponibles)", + "example": "K1303" + }, + "codeTypePeriode": { + "type": "string", + "description": "Le type de période (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "TRIMESTRE" + }, + "codeTypeNomenclature": { + "type": "string", + "description": "Le type de nomenclature (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "CATCAND" + }, + "dernierePeriode": { + "type": "boolean", + "description": "Optionnel: A renseigner à true pour que la recherche se limite à la période la plus récente sur cet indicateur, sinon la recherche se limite à la liste de périodes fournie en entrée" + }, + "listeCodePeriode": { + "type": "array", + "description": "Optionnel: A renseigner avec les périodes souhaitées, sinon la recherche est réalisée sur toutes les périodes disponibles sur cet indicateur", + "items": { + "type": "string", + "description": "Optionnel: A renseigner avec les périodes souhaitées, sinon la recherche est réalisée sur toutes les périodes disponibles sur cet indicateur", + "example": "[\"2020T2\",\"2020T3\"]" + }, + "example": [ + "2020T2", + "2020T3" + ] + }, + "listeCodeNomenclature": { + "type": "array", + "description": "Optionnel: A renseigner avec les nomenclatures souhaitées, sinon la recherche est réalisée sur toutes les nomenclatures disponibles sur cet indicateur", + "items": { + "type": "string", + "description": "Optionnel: A renseigner avec les nomenclatures souhaitées, sinon la recherche est réalisée sur toutes les nomenclatures disponibles sur cet indicateur", + "example": "[\"A\",\"B\",\"C\"]" + }, + "example": [ + "A", + "B", + "C" + ] + }, + "sansCaracteristiques": { + "type": "boolean", + "description": "Optionnel: A renseigner à true pour que la recherche se limite aux valeurs hors caractéristiques sur cet indicateur, sinon la recherche se limite aux valeurs de la liste de caractéristiques fournie en entrée" + }, + "listeCaracteristiques": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Caracteristique" + } + } + }, + "required": [ + "codeTypeTerritoire", + "codeTerritoire", + "codeTypeActivite", + "codeActivite", + "codeTypePeriode", + "codeTypeNomenclature" + ] + }, + "Caracteristique": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour de la caractéristique", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeCaracteristique": { + "type": "string", + "description": "Le code du type de la caractéristique", + "example": "AGC_RAT" + }, + "codeCaracteristique": { + "type": "string", + "description": "Le code de la caractéristique", + "example": "AGC_BASS" + }, + "libelleCaracteristique": { + "type": "string", + "description": "Le libellé de la caractéristique", + "example": "rattachement agence bassin" + }, + "masque": { + "type": "boolean", + "description": "La caractéristique est masqué par l'administrateur", + "example": true + } + }, + "required": [ + "codeTypeCaracteristique", + "codeCaracteristique", + "libelleCaracteristique" + ], + "xml": { + "name": "CaracteristiqueReferentiel", + "namespace": "http://fr.pe.auto.service.da084.services.rest.model.referentiel" + } + }, + "IndicateurRetour": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour de l'indicateur", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeIndicateur": { + "type": "string", + "description": "Le code de l'indicateur", + "example": "DE_1" + }, + "codeFamille": { + "type": "string", + "description": "Le code famille de l'indicateur", + "example": "DEMANDEURS" + }, + "libIndicateur": { + "type": "string", + "description": "Le libellé de l'indicateur", + "example": "Nombre et % de DE par catégories x caractéristiques, % par activités (Rome, Compétence)" + }, + "libTerritoire": { + "type": "string", + "description": "Le libellé du territoire", + "example": "NOUVELLE-AQUITAINE" + }, + "listeValeursParPeriode": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ValeursParPeriode" + } + } + } + }, + "ValeursParPeriode": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour de la valeur", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeTerritoire": { + "type": "string", + "description": "Le code du type de territoire", + "example": "REG" + }, + "codeTerritoire": { + "type": "string", + "description": "Le code territoire", + "example": "75" + }, + "libTerritoire": { + "type": "string", + "description": "Le libellé du territoire", + "example": "NOUVELLE-AQUITAINE" + }, + "codeTypeActivite": { + "type": "string", + "description": "Le code du type d'activité", + "example": "ROME" + }, + "codeActivite": { + "type": "string", + "description": "Le code d'activité", + "example": "A1203" + }, + "libActivite": { + "type": "string", + "description": "Le libellé de l'activité", + "example": "Aménagement et entretien des espaces verts" + }, + "codeNomenclature": { + "type": "string", + "description": "Le code de nomenclature", + "example": "A" + }, + "libNomenclature": { + "type": "string", + "description": "Le libellé de nomenclature", + "example": "Demandeurs d'Emploi de catégorie A" + }, + "codeTypePeriode": { + "type": "string", + "description": "Le code du type de période", + "example": "TRIMESTRE" + }, + "codePeriode": { + "type": "string", + "description": "Le code de la période", + "example": "2023T4" + }, + "libPeriode": { + "type": "string", + "description": "Le libellé de la période", + "example": "4ème trimestre 2023" + }, + "valeurPrincipaleNom": { + "type": "string", + "description": "Le nom de la valeur principale", + "example": "Nombre de demandeurs d'emploi" + }, + "valeurPrincipaleNombre": { + "type": "integer", + "description": "La valeur principale", + "format": "int32", + "example": 4750 + }, + "valeurPrincipaleRang": { + "type": "integer", + "description": "La valeur principale si l'indicateur représente un rang", + "format": "int32", + "example": 4 + }, + "valeurPrincipaleMontant": { + "type": "number", + "description": "La valeur principale si l'indicateur représente un montant", + "format": "double", + "example": 55.5 + }, + "valeurPrincipaleTaux": { + "type": "number", + "description": "La valeur principale si l'indicateur représente un taux", + "format": "double", + "example": 10 + }, + "valeurSecondaireNombre": { + "type": "integer", + "description": "La valeur secondaire", + "format": "int32", + "example": 4750 + }, + "valeurSecondairePourcentage": { + "type": "number", + "description": "La valeur secondaire en pourcentage", + "format": "double", + "example": 54 + }, + "valeurSecondairePourcentage2": { + "type": "number", + "description": "La valeur secondaire en pourcentage", + "format": "double", + "example": 54 + }, + "valeurSecondaireTaux": { + "type": "number", + "description": "La valeur secondaire si l'indicateur représente un taux", + "format": "double", + "example": 10 + }, + "libPctParActivite": { + "type": "string", + "description": "Le libellé du pourcentage par activité", + "example": "Pourcentage de demandeurs d'emploi par activité" + }, + "listeValeurParCaract": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ValeursParCaracteristique" + } + } + } + }, + "ValeursParCaracteristique": { + "type": "object", + "properties": { + "codeTypeCaract": { + "type": "string", + "description": "La code du type de la caractéristique", + "example": "GENRE" + }, + "codeCaract": { + "type": "string", + "description": "La code de la caractéristique", + "example": "H" + }, + "libCaract": { + "type": "string", + "description": "Le libellé de la caractéristique", + "example": "Homme" + }, + "nombre": { + "type": "integer", + "description": "La valeur de la caractéristique", + "format": "int32", + "example": 4470 + }, + "pourcentage": { + "type": "number", + "description": "Le pourcentage de la caractéristique", + "format": "double", + "example": 94 + }, + "montant": { + "type": "number", + "description": "Le montant (s'il existe) de la caractéristique", + "format": "double", + "example": 10 + }, + "taux": { + "type": "number", + "description": "Le taux (s'il existe) de la caractéristique", + "format": "double", + "example": 10 + } + } + }, + "CritereIndicateurSansNomenclature": { + "type": "object", + "properties": { + "codeTypeTerritoire": { + "type": "string", + "description": "Le type de territoire (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "DEP" + }, + "codeTerritoire": { + "type": "string", + "description": "Le code du territoire (voir le référentiel Territoire pour les codes disponibles)", + "example": "33" + }, + "codeTypeActivite": { + "type": "string", + "description": "Le type d'activité (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "ROME" + }, + "codeActivite": { + "type": "string", + "description": "Le code d'activité (voir le référentiel Activite pour les codes disponibles)", + "example": "K1303" + }, + "codeTypePeriode": { + "type": "string", + "description": "Le type de période (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "TRIMESTRE" + }, + "dernierePeriode": { + "type": "boolean", + "description": "Optionnel: A renseigner à true pour que la recherche se limite à la période la plus récente sur cet indicateur, sinon la recherche se limite à la liste de périodes fournie en entrée" + }, + "listeCodePeriode": { + "type": "array", + "description": "Optionnel: A renseigner avec les périodes souhaitées, sinon la recherche est réalisée sur toutes les périodes disponibles sur cet indicateur", + "items": { + "type": "string", + "description": "Optionnel: A renseigner avec les périodes souhaitées, sinon la recherche est réalisée sur toutes les périodes disponibles sur cet indicateur", + "example": "[\"2020T2\",\"2020T3\"]" + }, + "example": [ + "2020T2", + "2020T3" + ] + }, + "sansCaracteristiques": { + "type": "boolean", + "description": "Optionnel: A renseigner à true pour que la recherche se limite aux valeurs hors caractéristiques sur cet indicateur, sinon la recherche se limite aux valeurs de la liste de caractéristiques fournie en entrée" + }, + "listeCaracteristiques": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Caracteristique" + } + } + }, + "required": [ + "codeTypeTerritoire", + "codeTerritoire", + "codeTypeActivite", + "codeActivite", + "codeTypePeriode" + ] + }, + "Activite": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour de l'activité", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeActivite": { + "type": "string", + "description": "Le type d'activité (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "ROME" + }, + "codeActivite": { + "type": "string", + "description": "Le code d'activité (voir le référentiel Activite pour les codes disponibles)", + "example": "K1303" + }, + "libelleActivite": { + "type": "string", + "description": "Le libellé de l'activité", + "example": "Ouvriers qualifiés de l'électricité et de l'électronique" + }, + "attribut": { + "type": "string", + "description": "Optionnel: le code NSF de l'activité", + "example": "114" + } + }, + "required": [ + "codeTypeActivite", + "codeActivite", + "libelleActivite" + ] + }, + "ListeActivite": { + "type": "object", + "properties": { + "activites": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Activite" + } + } + } + }, + "ListeTypeActivite": { + "type": "object", + "properties": { + "typeActivites": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeActivite" + } + } + } + }, + "TypeActivite": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour du type d'activité", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeActivite": { + "type": "string", + "description": "Le code du type d'activité", + "example": "ROME" + }, + "libelleTypeActivite": { + "type": "string", + "description": "Le libellé du type d'activité", + "example": "Métier (ROME)" + } + } + }, + "ListeCaracteristique": { + "type": "object", + "properties": { + "caracteristiques": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Caracteristique" + } + } + } + }, + "ListeTypeCaracteristique": { + "type": "object", + "properties": { + "typeCaracteristiques": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeCaracteristique" + } + } + } + }, + "TypeCaracteristique": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour du type", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeCaracteristique": { + "type": "string", + "description": "Le code du type de la caractéristique", + "example": "AGC_RAT" + }, + "libelleTypeCaracteristique": { + "type": "string", + "description": "Le libellé du type de la caractéristique", + "example": "Territoire de rattachement de l'offre à l'agence" + } + } + }, + "ListeDetailIndicateur": { + "type": "object", + "properties": { + "listeIndicateurs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DetailIndicateur" + } + } + } + }, + "DetailIndicateur": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour de l'indicateur", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeIndicateur": { + "type": "string", + "description": "Le code de l'indicateur", + "example": "DE_1" + }, + "libelleIndicateur": { + "type": "string", + "description": "Le libellé de l'indicateur", + "example": "Nombre et % de DE par catégories x caractéristiques, % par activités (Rome, Compétence)" + }, + "descriptif": { + "type": "string", + "description": "Le descriptif de l'indicateur", + "example": "Définition détaillée : informations sur les sources de données utilisées, les méthodes de calcul, les limitations sur certains axes, les aspects réglementaires éventuels." + }, + "codeFamille": { + "type": "string", + "description": "Le code famille de l'indicateur", + "example": "DEMANDEURS" + }, + "disponibiliteIndicateur": { + "type": "integer", + "description": "Indique si l'indicateur est disponible (1) ou désactivé (0)", + "format": "int32", + "example": 1 + }, + "listeTypesValeurs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeValeur" + } + }, + "listeTypesTerritoiresIndicateur": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeTerritoire" + } + }, + "listeTypesActivitesIndicateur": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeActivite" + } + }, + "listeTypesPeriodesIndicateur": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypePeriodeIndicateur" + } + }, + "listeTypesNomenclaturesIndicateur": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeNomenclatureIndicateur" + } + }, + "listeCroisementsIndicateur": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CroisementIndicateur" + } + }, + "listeCaracteristiqueIndicateur": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CaracteristiqueIndicateur" + } + }, + "listeTypesCracteristiqueIndicateur": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeCaracteristique" + } + } + } + }, + "TypeValeur": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour du type de valeur", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "valeurPrincipale": { + "type": "string", + "description": "La valeur principale", + "example": "0" + }, + "codeTypeValeur": { + "type": "string", + "description": "Le code du type de valeur", + "example": "NB_ET_PCT" + }, + "numOrdre": { + "type": "integer", + "description": "Le numéro d'ordre de la valeur", + "format": "int32", + "example": 1 + }, + "libValeur": { + "type": "string", + "description": "Le libellé du type de valeur", + "example": "Nombre et % de répartition de ce nombre par caractéristiques." + }, + "libelleValeurSpecifique": { + "type": "string", + "description": "Le libellé spécifique de la valeur", + "example": "Nombre et % des retours à l'emploi AB par durée d'emploi et caractéristiques" + } + } + }, + "TypeTerritoire": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour du type de territoire", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeTerritoire": { + "type": "string", + "description": "Le code du type de territoire", + "example": "DEP" + }, + "libelleTypeTerritoire": { + "type": "string", + "description": "Le libellé du type de territoire", + "example": "Département" + } + } + }, + "TypePeriodeIndicateur": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour du type de période de l'indicateur", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypePeriode": { + "type": "string", + "description": "Le code du type de période", + "example": "TRIMESTRE" + }, + "libelleTypePeriode": { + "type": "string", + "description": "Le libellé du type de période", + "example": "Trimestre" + }, + "profondeurMax": { + "type": "string", + "description": "Nombre maximum de période interrogeable pour ce type", + "example": "12" + } + } + }, + "TypeNomenclatureIndicateur": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour du type de nomenclature de l'indicateur", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeNomenclature": { + "type": "string", + "description": "Le code du type de nomenclature de l'indicateur", + "example": "DUREEEMP" + }, + "libelleTypeNomenclature": { + "type": "string", + "description": "Le libellé du type de nomenclature de l'indicateur", + "example": "Durée d'emploi > 1 mois, emploi durable (> 6 mois), Toutes durées)" + }, + "listeValeursNomenclaturesIndicateur": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ValeurNomenclatureIndicateur" + } + } + } + }, + "ValeurNomenclatureIndicateur": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour de la valeur de la nomenclature", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "valeurNomenclature": { + "type": "string", + "description": "La valeur de la nomenclature", + "example": "SUP1M" + }, + "libelleNomenclature": { + "type": "string", + "description": "La libellé de la nomenclature", + "example": "Emploi > 1 mois" + } + } + }, + "CroisementIndicateur": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour du croisement de l'indicateur", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeTerritoire": { + "type": "string", + "description": "Le type de territoire (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "DEP" + }, + "codeTypeActivite": { + "type": "string", + "description": "Le type d'activité (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "ROME" + }, + "codeTypePeriode": { + "type": "string", + "description": "Le type de période (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "TRIMESTRE" + }, + "codeTypeNomenclature": { + "type": "string", + "description": "Le type de nomenclature (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "CATCAND" + }, + "codeNomenclature": { + "type": "string", + "description": "Le code de nomenclature", + "example": "A" + } + } + }, + "CaracteristiqueIndicateur": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour de la caractéristique de l'indicateur", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeCaracteristique": { + "type": "string", + "description": "Le code du type de la caractéristique", + "example": "GENRE" + }, + "codeCaracteristique": { + "type": "string", + "description": "Le code de la caractéristique", + "example": "H" + }, + "libelleCaracteristique": { + "type": "string", + "description": "Le libellé de la caractéristique", + "example": "Homme" + } + }, + "required": [ + "codeTypeCaracteristique", + "codeCaracteristique", + "libelleCaracteristique" + ] + }, + "ListeNomenclature": { + "type": "object", + "properties": { + "nomenclatures": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Nomenclature" + } + } + } + }, + "Nomenclature": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour de la nomenclature", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeNomenclature": { + "type": "string", + "description": "Le code du type de nomenclature", + "example": "ACCESEMP" + }, + "codeNomenclature": { + "type": "string", + "description": "Le code de la nomenclature", + "example": "12M" + }, + "libelleNomenclature": { + "type": "string", + "description": "Le libellé de la nomenclature", + "example": "12 Mois" + } + } + }, + "ListeTypeNomenclature": { + "type": "object", + "properties": { + "typeNomenclatures": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeNomenclature" + } + } + } + }, + "TypeNomenclature": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour du type de nomenclature", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeNomenclature": { + "type": "string", + "description": "Le code du type de nomenclature", + "example": "ACCESEMP" + }, + "libelleTypeNomenclature": { + "type": "string", + "description": "Le libellé du type de nomenclature", + "example": "Délai d'accès à l'emploi (6 mois / 12 mois)" + } + } + }, + "ListePeriode": { + "type": "object", + "properties": { + "periodes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Periode" + } + } + } + }, + "Periode": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour de la période", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypePeriode": { + "type": "string", + "description": "Le code du type de période", + "example": "TRIMESTRE" + }, + "codePeriode": { + "type": "string", + "description": "Le code de la période", + "example": "2023T1" + }, + "ordrePeriode": { + "type": "integer", + "description": "Ordre de la période", + "format": "int32", + "example": 1 + }, + "libellePeriode": { + "type": "string", + "description": "Libellé de la période", + "example": "1er trimestre 2023" + } + }, + "required": [ + "codeTypePeriode", + "codePeriode", + "ordrePeriode", + "libellePeriode" + ] + }, + "ListeTypePeriode": { + "type": "object", + "properties": { + "typePeriodes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypePeriode" + } + } + } + }, + "TypePeriode": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour du type de période", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypePeriode": { + "type": "string", + "description": "Le code du type de période", + "example": "TRIMESTRE" + }, + "libelleTypePeriode": { + "type": "string", + "description": "Le libellé du type de période", + "example": "Trimestre" + } + }, + "required": [ + "codeTypePeriode", + "libelleTypePeriode" + ] + }, + "ListeRomeFap": { + "type": "object", + "properties": { + "romeFapList": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RomeFap" + } + } + } + }, + "RomeFap": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour du couple", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeRome": { + "type": "string", + "description": "Le code ROME", + "example": "M1801" + }, + "codeFap": { + "type": "string", + "description": "Le code FAP", + "example": "M0Z60" + } + } + }, + "ListeTerritoire": { + "type": "object", + "properties": { + "territoires": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Territoire" + } + } + } + }, + "Territoire": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour du territoire", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeTerritoire": { + "type": "string", + "description": "Le type de territoire (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "DEP" + }, + "codeTerritoire": { + "type": "string", + "description": "Le code du territoire (voir le référentiel Territoire pour les codes disponibles)", + "example": "33" + }, + "libelleTerritoire": { + "type": "string", + "description": "Le libellé du territoire", + "example": "GIRONDE" + }, + "codeTypeTerritoireParent": { + "type": "string", + "description": "Le code type du territoire parent", + "example": "REG" + }, + "codeTerritoireParent": { + "type": "string", + "description": "Le code du territoire parent", + "example": "75" + } + } + }, + "ListeTypeTerritoire": { + "type": "object", + "properties": { + "typeTerritoires": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeTerritoire" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/backend/api/offres_emploi_v2_bundled.json b/backend/api/offres_emploi_v2_bundled.json new file mode 100644 index 0000000..d2c8260 --- /dev/null +++ b/backend/api/offres_emploi_v2_bundled.json @@ -0,0 +1,2463 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "Offres d'emploi", + "description": "Accédez aux offres d'emploi disponibles sur [francetravail.fr](https://www.francetravail.fr)\r\n\r\nConsultez les référentiels pour renseigner les critères de recherche d'offres\r\n\r\n**Scopes :**`o2dsoffre`, `api_offresdemploiv2`\r\n\r\n**Royaume** : `/partenaire`\r\n", + "version": "2" + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/offresdemploi" + } + ], + "paths": { + "/v2/offres/search": { + "get": { + "tags": [ + "Offres" + ], + "summary": "Rechercher des offres", + "description": "Cette ressource permet de réaliser une recherche d'offres à partir de critères de sélection, parmi les offres de France Travail et de ses partenaires.\r\n\r\nLa liste des offres retournées est paginée.\r\n\r\nLa quantité d'offres renvoyées par l'API peut varier par rapport à ce qui est affiché dans la recherche d'offres sur francetravail.fr, selon si le partenaire (voir le paramètre d'entrée \"origineOffre\") a donné ou non son accord pour la diffusion de ses offres.", + "operationId": "recupererListeOffre", + "parameters": [ + { + "name": "range", + "in": "query", + "description": "Pagination des données. La plage de résultats est limitée à 150.\r\n\r\nFormat : p-d, où : ", + "schema": { + "type": "string" + }, + "example": "0-49" + }, + { + "name": "sort", + "in": "query", + "description": "Il est possible de trier les résultats de 3 façons : ", + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "name": "domaine", + "in": "query", + "description": "Domaine de l'offre.\r\n\r\n Voir la ressource référentiel des domaines métiers.", + "schema": { + "type": "string" + }, + "example": "G17" + }, + { + "name": "codeROME", + "in": "query", + "description": "Code ROME de l'offre. Jusqu'à 200 valeurs possibles, séparées par une virgule.\r\n\r\n Voir la ressource référentiel des métiers ROME.", + "schema": { + "type": "string" + }, + "example": "D1102,D1104,D1108" + }, + { + "name": "appellation", + "in": "query", + "description": "Code appellation ROME de l'offre.\r\n\r\n Voir la ressource référentiel des appellations ROME.", + "schema": { + "type": "string" + }, + "example": 38444 + }, + { + "name": "theme", + "in": "query", + "description": "Thème ROME du métier.\r\n\r\n Voir la ressource référentiel des thèmes.", + "schema": { + "type": "string" + }, + "example": 12 + }, + { + "name": "secteurActivite", + "in": "query", + "description": "Division NAF de l'offre (2 premiers chiffres). Jusqu'à 2 valeurs possibles, séparées par une virgule.\r\n\r\n Voir la ressource référentiel des secteurs d'activités.", + "schema": { + "type": "string" + }, + "example": "01,02" + }, + { + "name": "codeNAF", + "in": "query", + "description": "Code NAF (Code APE) de l'offre, (format 99.99X). Jusqu'à 2 valeurs possibles, séparées par une virgule.\r\n\r\n Voir la ressource référentiel des codes nafs.", + "schema": { + "type": "string" + }, + "example": "78.20Z" + }, + { + "name": "experience", + "in": "query", + "description": "Niveau d'expérience demandé : 0 - Non précisé, 1 - Moins d'un an, 2 - De 1 à 3 ans, 3 - Plus de 3 ans.", + "schema": { + "type": "string" + }, + "example": 2 + }, + { + "name": "typeContrat", + "in": "query", + "description": "Code du type de contrat.\r\n\r\n Voir la ressource référentiel des type de contrats.\r\n\r\nRemarque : L'opérateur utilisé entre les filtres typeContrat et natureContrat est un OU, c'est-à-dire que pour la recherche \"typeContrat=CDI,CDD\" avec \"natureContrat=E1\" alors les résultats contiendront toutes les offres en type de contrat CDI ou CDD (peu importe la nature) mais également toutes les offres de nature E1 (sans prendre en compte le type de contrat).", + "schema": { + "type": "string" + }, + "example": "CDI" + }, + { + "name": "natureContrat", + "in": "query", + "description": "Code de la nature du contrat.\r\n\r\n Voir la ressource référentiel des natures de contrats.\r\n\r\nRemarque : L'opérateur utilisé entre les filtres typeContrat et natureContrat est un OU, c'est-à-dire que pour la recherche \"typeContrat=CDI,CDD\" avec \"natureContrat=E1\" alors les résultats contiendront toutes les offres en type de contrat CDI ou CDD (peu importe la nature) mais également toutes les offres de nature E1 (sans prendre en compte le type de contrat).", + "schema": { + "type": "string" + }, + "example": "E1" + }, + { + "name": "origineOffre", + "in": "query", + "description": "Origine de l'offre\r\n\r\n Valeurs possibles : ", + "schema": { + "type": "integer", + "format": "int64" + }, + "example": 1 + }, + { + "name": "qualification", + "in": "query", + "description": "Qualification du poste : 0 - non-cadre, 9 - cadre.", + "schema": { + "type": "string" + }, + "example": 9 + }, + { + "name": "tempsPlein", + "in": "query", + "description": "Temps plein ou partiel.\r\n\r\nFavoriser l'utilisation du filtre DureeHebdo", + "schema": { + "type": "boolean" + }, + "example": true + }, + { + "name": "commune", + "in": "query", + "description": "Code INSEE de la commune. Jusqu'à 5 valeurs possibles, séparées par une virgule.\r\n\r\n Voir la ressource référentiel des communes.\r\n\r\nLe comportement de recherche permet de remonter les offres pour lesquelles la distance entre la commune recherchée et la commune de l'offre est inférieure ou égale à la distance maximum demandée, ainsi que les offres pour lesquelles cette distance est marginalement plus élevée (jusqu'à + 30% de la distance maximum demandée).\r\n\r\nSpécificité de la ville de Paris, l'ensemble des offres de Paris sont remontées pour :Spécificité de la ville de Lyon, l'ensemble des offres de Lyon sont remontées dès que le centre de Lyon est atteint par le rayon de distance recherché.\r\n\r\nRemarque : pour obtenir seulement les offres d'une commune spécifique, alors il faut renseigner le paramètre \"distance=0\"", + "schema": { + "type": "string" + }, + "example": "33063,31555" + }, + { + "name": "distance", + "in": "query", + "description": "Distance kilométrique du rayon de la recherche autour de la commune (pris en compte uniquement si une commune est renseignée).", + "schema": { + "type": "integer", + "format": "int64" + }, + "example": 10 + }, + { + "name": "departement", + "in": "query", + "description": "Département de l'offre. Jusqu'à 5 valeurs possibles, séparées par une virgule.\r\n\r\n Voir la ressource référentiel des départements.", + "schema": { + "type": "string" + }, + "example": "33,31" + }, + { + "name": "inclureLimitrophes", + "in": "query", + "description": "Inclure les départements limitrophes dans la recherche.", + "schema": { + "type": "boolean" + }, + "example": false + }, + { + "name": "region", + "in": "query", + "description": "Région de l'offre.\r\n\r\n Voir la ressource référentiel des régions.", + "schema": { + "type": "string" + }, + "example": 75 + }, + { + "name": "paysContinent", + "in": "query", + "description": "Pays ou continent de l'offre.\r\n\r\n Voir la ressource référentiel des pays ou des continents.", + "schema": { + "type": "string" + }, + "example": 99127 + }, + { + "name": "niveauFormation", + "in": "query", + "description": "Niveau de formation demandé.\r\n\r\n Voir la ressource référentiel des niveaux de formations.", + "schema": { + "type": "string" + }, + "example": "NV3" + }, + { + "name": "permis", + "in": "query", + "description": "Permis demandé.\r\n\r\n Voir la ressource référentiel des permis.", + "schema": { + "type": "string" + }, + "example": "B" + }, + { + "name": "motsCles", + "in": "query", + "description": "Chaque mot clé (ou expression) comprend au moins 2 caractères et doit être séparé par une virgule.\r\n\r\nLa recherche sur plusieurs mots clefs est traitée via l'opérateur logique \"ET\"\r\n\r\nLa recherche de mots clés peut permettre de rechercher sur : Caractères autorisés : [aA-zZ]+[0-9]+[espace]+[@#$%^&+./-\"]", + "schema": { + "type": "string" + }, + "example": "boulanger,patissier" + }, + { + "name": "salaireMin", + "in": "query", + "description": "Salaire minimum recherché. Si cette donnée est renseignée, le code du type de salaire minimum est obligatoire.", + "schema": { + "type": "string" + }, + "example": 1400 + }, + { + "name": "periodeSalaire", + "in": "query", + "description": "Période pour le calcul du salaire minimum : M - Mensuel, A - Annuel, H - Horaire, C - Cachet. Si cette donnée est renseignée, le salaire minimum est obligatoire.", + "schema": { + "type": "string" + }, + "example": "M" + }, + { + "name": "accesTravailleurHandicape", + "in": "query", + "description": "Offres pour lesquelles l'employeur est handi friendly.", + "schema": { + "type": "boolean" + }, + "example": false + }, + { + "name": "publieeDepuis", + "in": "query", + "description": "Recherche les offres publiées depuis maximum « X » jours.", + "schema": { + "type": "integer", + "format": "int64" + }, + "example": 7 + }, + { + "name": "minCreationDate", + "in": "query", + "description": "Date minimale pour laquelle rechercher des offres (format yyyy-MM-dd'T'hh:mm:ss'Z').", + "schema": { + "type": "string" + }, + "example": "2022-03-25T14:52:00Z" + }, + { + "name": "maxCreationDate", + "in": "query", + "description": "Date maximale pour laquelle rechercher des offres (format yyyy-MM-dd'T'hh:mm:ss'Z').", + "schema": { + "type": "string" + }, + "example": "2022-04-15T07:18:25Z" + }, + { + "name": "offresMRS", + "in": "query", + "description": "Uniquement les offres d'emplois avec méthode de recrutement par simulation proposée.", + "schema": { + "type": "boolean" + }, + "example": false + }, + { + "name": "experienceExigence", + "in": "query", + "description": "Exigence d'expérience : D - débutant accepté, S - expérience souhaitée, E - expérience exigée.", + "schema": { + "type": "string" + }, + "example": "D" + }, + { + "name": "grandDomaine", + "in": "query", + "description": "Code du grand domaine de l'offre : ", + "schema": { + "type": "string" + }, + "example": "M16" + }, + { + "name": "partenaires", + "in": "query", + "description": "Liste des codes partenaires dont les offres sont à inclure ou exclure en fonction du mode de sélection associé et du filtre de l'origine de l'offre.", + "schema": { + "type": "string" + }, + "example": "PARTENAIRE1" + }, + { + "name": "modeSelectionPartenaires", + "in": "query", + "description": "Mode de sélection des partenaires. Énumération (INCLUS ou EXCLU).", + "schema": { + "type": "string" + }, + "example": "INCLUS" + }, + { + "name": "dureeHebdoMin", + "in": "query", + "description": "Recherche les offres avec une durée minimale (format HHMM).", + "schema": { + "type": "string" + }, + "example": 800 + }, + { + "name": "dureeHebdoMax", + "in": "query", + "description": "Recherche les offres avec une durée maximale (format HHMM).", + "schema": { + "type": "string" + }, + "example": 2430 + }, + { + "name": "dureeContratMin", + "in": "query", + "description": "Recherche les offres avec une durée de contrat minimale (en mois, format double de 0 à 99 bornes incluses).", + "schema": { + "type": "string" + }, + "example": 0.5 + }, + { + "name": "dureeContratMax", + "in": "query", + "description": "Recherche les offres avec une durée de contrat maximale (en mois, format double de 0 à 99 bornes incluses).", + "schema": { + "type": "string" + }, + "example": 24 + }, + { + "name": "dureeHebdo ", + "in": "query", + "description": "Type de durée du contrat de l'offre : 0 - Non précisé, 1 - Temps plein, 2 - Temps partiel.", + "schema": { + "type": "string" + }, + "example": 1 + }, + { + "name": "offresManqueCandidats", + "in": "query", + "description": "Filtre les offres difficiles à pourvoir.", + "schema": { + "type": "boolean" + }, + "example": true + }, + { + "name": "entreprisesAdaptees", + "in": "query", + "description": "Filtre les offres dont l'entreprise permet à un travailleur en situation de handicap d'exercer une activité professionnelle dans des conditions adaptées à ses capacités.", + "schema": { + "type": "boolean" + }, + "example": true + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer gEoDOnecV-iQam2bxhijIkJDvfA" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JfHAwKqXzYsBXA7XWJuEYbt1Wr8" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer H37Wm18OEJlPiTmllLzE0eNUhZo" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer KzDJSNAHeWOuX1JzR-ObZ1r0t2Q" + } + } + ], + "responses": { + "200": { + "description": "Tous les résultats ont été récupérés avec succès", + "headers": { + "Content-Range": { + "description": "Format : \"offres p-d/t\", où ", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResultatRecherche" + } + } + } + }, + "204": { + "description": "Aucune offre correspondante", + "headers": { + "Content-Range": { + "description": "\"*/0\" : Aucun résultat correspondant à ces critères", + "style": "simple", + "schema": { + "type": "string" + } + } + } + }, + "206": { + "description": "Les résultats ont été récupérés avec succès, il y a d'autres résultats disponibles", + "headers": { + "Content-Range": { + "description": "Format : \"offres p-d/t\", où ", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResultatRecherche" + } + } + } + }, + "400": { + "description": "Mauvaise requête" + }, + "500": { + "description": "Erreur interne au serveur" + } + } + } + }, + "/v2/offres/{id}": { + "get": { + "tags": [ + "Offres" + ], + "summary": "Consulter un détail d'offre", + "description": "Cette ressource permet de récupérer le détail d'une offre à partir de son identifiant.", + "operationId": "recupererOffre", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Identifiant de l'offre d'emploi.", + "required": true, + "schema": { + "type": "string" + }, + "example": "048KLTP" + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer gEoDOnecV-iQam2bxhijIkJDvfA" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JfHAwKqXzYsBXA7XWJuEYbt1Wr8" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer H37Wm18OEJlPiTmllLzE0eNUhZo" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer KzDJSNAHeWOuX1JzR-ObZ1r0t2Q" + } + } + ], + "responses": { + "200": { + "description": "L'offre a été récupérée avec succès", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Offre" + } + } + } + }, + "204": { + "description": "L'offre n'existe pas" + }, + "400": { + "description": "Mauvaise requête" + }, + "500": { + "description": "Erreur interne au serveur" + } + } + } + }, + "/v2/referentiel/appellations": { + "get": { + "tags": [ + "Référentiel" + ], + "summary": "Appellations ROME", + "description": "Renvoie le référentiel des appellations ROME", + "operationId": "recupererReferentielAppellations", + "responses": { + "200": { + "description": "Le référentiel a été renvoyé avec succès", + "headers": { + "Content-Range": { + "description": "Format : \"appellations */size\" où size est le nombre d’éléments attendus, * si inconnu", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Referentiel" + } + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer gEoDOnecV-iQam2bxhijIkJDvfA" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JfHAwKqXzYsBXA7XWJuEYbt1Wr8" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer H37Wm18OEJlPiTmllLzE0eNUhZo" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer KzDJSNAHeWOuX1JzR-ObZ1r0t2Q" + } + } + ] + } + }, + "/v2/referentiel/nafs": { + "get": { + "tags": [ + "Référentiel" + ], + "summary": "Codes nafs", + "description": "Renvoie le référentiel des codes nafs", + "operationId": "recupererReferentielCodesNAFs", + "responses": { + "200": { + "description": "Le référentiel a été renvoyé avec succès", + "headers": { + "Content-Range": { + "description": "Format : \"nafs */size\" où size est le nombre d’éléments attendus, * si inconnu", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Referentiel" + } + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer gEoDOnecV-iQam2bxhijIkJDvfA" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JfHAwKqXzYsBXA7XWJuEYbt1Wr8" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer H37Wm18OEJlPiTmllLzE0eNUhZo" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer KzDJSNAHeWOuX1JzR-ObZ1r0t2Q" + } + } + ] + } + }, + "/v2/referentiel/communes": { + "get": { + "tags": [ + "Référentiel" + ], + "summary": "Communes", + "description": "Renvoie le référentiel des communes", + "operationId": "recupererReferentielCommunes", + "responses": { + "200": { + "description": "Le référentiel a été renvoyé avec succès", + "headers": { + "Content-Range": { + "description": "Format : \"communes */size\" où size est le nombre d’éléments attendus, * si inconnu", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Commune" + } + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer gEoDOnecV-iQam2bxhijIkJDvfA" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JfHAwKqXzYsBXA7XWJuEYbt1Wr8" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer H37Wm18OEJlPiTmllLzE0eNUhZo" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer KzDJSNAHeWOuX1JzR-ObZ1r0t2Q" + } + } + ] + } + }, + "/v2/referentiel/continents": { + "get": { + "tags": [ + "Référentiel" + ], + "summary": "Continents", + "description": "Renvoie le référentiel des continents", + "operationId": "recupererReferentielContinents", + "responses": { + "200": { + "description": "Le référentiel a été renvoyé avec succès", + "headers": { + "Content-Range": { + "description": "Format : \"continents */size\" où size est le nombre d’éléments attendus, * si inconnu", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Referentiel" + } + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer gEoDOnecV-iQam2bxhijIkJDvfA" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JfHAwKqXzYsBXA7XWJuEYbt1Wr8" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer H37Wm18OEJlPiTmllLzE0eNUhZo" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer KzDJSNAHeWOuX1JzR-ObZ1r0t2Q" + } + } + ] + } + }, + "/v2/referentiel/departements": { + "get": { + "tags": [ + "Référentiel" + ], + "summary": "Départements", + "description": "Renvoie le référentiel des départements", + "operationId": "recupererReferentielDepartements", + "responses": { + "200": { + "description": "Le référentiel a été renvoyé avec succès", + "headers": { + "Content-Range": { + "description": "Format : \"departements */size\" où size est le nombre d’éléments attendus, * si inconnu", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Departement" + } + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer gEoDOnecV-iQam2bxhijIkJDvfA" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JfHAwKqXzYsBXA7XWJuEYbt1Wr8" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer H37Wm18OEJlPiTmllLzE0eNUhZo" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer KzDJSNAHeWOuX1JzR-ObZ1r0t2Q" + } + } + ] + } + }, + "/v2/referentiel/domaines": { + "get": { + "tags": [ + "Référentiel" + ], + "summary": "Domaines métiers", + "description": "Renvoie le référentiel des domaines métiers", + "operationId": "recupererReferentielDomainesMetiers", + "responses": { + "200": { + "description": "Le référentiel a été renvoyé avec succès", + "headers": { + "Content-Range": { + "description": "Format : \"domaines */size\" où size est le nombre d’éléments attendus, * si inconnu", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Referentiel" + } + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer gEoDOnecV-iQam2bxhijIkJDvfA" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JfHAwKqXzYsBXA7XWJuEYbt1Wr8" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer H37Wm18OEJlPiTmllLzE0eNUhZo" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer KzDJSNAHeWOuX1JzR-ObZ1r0t2Q" + } + } + ] + } + }, + "/v2/referentiel/langues": { + "get": { + "tags": [ + "Référentiel" + ], + "summary": "Langues", + "description": "Renvoie le référentiel des langues", + "operationId": "recupererReferentielLangues", + "responses": { + "200": { + "description": "Le référentiel a été renvoyé avec succès", + "headers": { + "Content-Range": { + "description": "Format : \"langues */size\" où size est le nombre d’éléments attendus, * si inconnu", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Referentiel" + } + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer gEoDOnecV-iQam2bxhijIkJDvfA" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JfHAwKqXzYsBXA7XWJuEYbt1Wr8" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer H37Wm18OEJlPiTmllLzE0eNUhZo" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer KzDJSNAHeWOuX1JzR-ObZ1r0t2Q" + } + } + ] + } + }, + "/v2/referentiel/metiers": { + "get": { + "tags": [ + "Référentiel" + ], + "summary": "Métiers ROME", + "description": "Renvoie le référentiel des métiers ROME", + "operationId": "recupererReferentielMetiers", + "responses": { + "200": { + "description": "Le référentiel a été renvoyé avec succès", + "headers": { + "Content-Range": { + "description": "Format : \"metiers */size\" où size est le nombre d’éléments attendus, * si inconnu", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Referentiel" + } + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer gEoDOnecV-iQam2bxhijIkJDvfA" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JfHAwKqXzYsBXA7XWJuEYbt1Wr8" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer H37Wm18OEJlPiTmllLzE0eNUhZo" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer KzDJSNAHeWOuX1JzR-ObZ1r0t2Q" + } + } + ] + } + }, + "/v2/referentiel/naturesContrats": { + "get": { + "tags": [ + "Référentiel" + ], + "summary": "Natures de contrats", + "description": "Renvoie le référentiel des natures de contrats", + "operationId": "recupererReferentielNaturesContrats", + "responses": { + "200": { + "description": "Le référentiel a été renvoyé avec succès", + "headers": { + "Content-Range": { + "description": "Format : \"naturesContrats */size\" où size est le nombre d’éléments attendus, * si inconnu", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Referentiel" + } + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer gEoDOnecV-iQam2bxhijIkJDvfA" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JfHAwKqXzYsBXA7XWJuEYbt1Wr8" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer H37Wm18OEJlPiTmllLzE0eNUhZo" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer KzDJSNAHeWOuX1JzR-ObZ1r0t2Q" + } + } + ] + } + }, + "/v2/referentiel/niveauxFormations": { + "get": { + "tags": [ + "Référentiel" + ], + "summary": "Niveaux de formations", + "description": "Renvoie le référentiel des niveaux de formations", + "operationId": "recupererReferentielNiveauxFormations", + "responses": { + "200": { + "description": "Le référentiel a été renvoyé avec succès", + "headers": { + "Content-Range": { + "description": "Format : \"niveauxFormations */size\" où size est le nombre d’éléments attendus, * si inconnu", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Referentiel" + } + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer gEoDOnecV-iQam2bxhijIkJDvfA" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JfHAwKqXzYsBXA7XWJuEYbt1Wr8" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer H37Wm18OEJlPiTmllLzE0eNUhZo" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer KzDJSNAHeWOuX1JzR-ObZ1r0t2Q" + } + } + ] + } + }, + "/v2/referentiel/pays": { + "get": { + "tags": [ + "Référentiel" + ], + "summary": "Pays", + "description": "Renvoie le référentiel des pays", + "operationId": "recupererReferentielPays", + "responses": { + "200": { + "description": "Le référentiel a été renvoyé avec succès", + "headers": { + "Content-Range": { + "description": "Format : \"pays */size\" où size est le nombre d’éléments attendus, * si inconnu", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Referentiel" + } + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer gEoDOnecV-iQam2bxhijIkJDvfA" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JfHAwKqXzYsBXA7XWJuEYbt1Wr8" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer H37Wm18OEJlPiTmllLzE0eNUhZo" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer KzDJSNAHeWOuX1JzR-ObZ1r0t2Q" + } + } + ] + } + }, + "/v2/referentiel/permis": { + "get": { + "tags": [ + "Référentiel" + ], + "summary": "Permis", + "description": "Renvoie le référentiel des permis", + "operationId": "recupererReferentielPermis", + "responses": { + "200": { + "description": "Le référentiel a été renvoyé avec succès", + "headers": { + "Content-Range": { + "description": "Format : \"permis */size\" où size est le nombre d’éléments attendus, * si inconnu", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Referentiel" + } + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer gEoDOnecV-iQam2bxhijIkJDvfA" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JfHAwKqXzYsBXA7XWJuEYbt1Wr8" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer H37Wm18OEJlPiTmllLzE0eNUhZo" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer KzDJSNAHeWOuX1JzR-ObZ1r0t2Q" + } + } + ] + } + }, + "/v2/referentiel/regions": { + "get": { + "tags": [ + "Référentiel" + ], + "summary": "Régions", + "description": "Renvoie le référentiel des régions", + "operationId": "recupererReferentielRegions", + "responses": { + "200": { + "description": "Le référentiel a été renvoyé avec succès", + "headers": { + "Content-Range": { + "description": "Format : \"regions */size\" où size est le nombre d’éléments attendus, * si inconnu", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Region" + } + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer gEoDOnecV-iQam2bxhijIkJDvfA" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JfHAwKqXzYsBXA7XWJuEYbt1Wr8" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer H37Wm18OEJlPiTmllLzE0eNUhZo" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer KzDJSNAHeWOuX1JzR-ObZ1r0t2Q" + } + } + ] + } + }, + "/v2/referentiel/secteursActivites": { + "get": { + "tags": [ + "Référentiel" + ], + "summary": "Secteurs d'activités", + "description": "Renvoie le référentiel des secteurs d'activités", + "operationId": "recupererReferentielSecteursActivites", + "responses": { + "200": { + "description": "Le référentiel a été renvoyé avec succès", + "headers": { + "Content-Range": { + "description": "Format : \"secteursActivites */size\" où size est le nombre d’éléments attendus, * si inconnu", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Referentiel" + } + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer gEoDOnecV-iQam2bxhijIkJDvfA" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JfHAwKqXzYsBXA7XWJuEYbt1Wr8" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer H37Wm18OEJlPiTmllLzE0eNUhZo" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer KzDJSNAHeWOuX1JzR-ObZ1r0t2Q" + } + } + ] + } + }, + "/v2/referentiel/themes": { + "get": { + "tags": [ + "Référentiel" + ], + "summary": "Thèmes", + "description": "Renvoie le référentiel des thèmes", + "operationId": "recupererReferentielThemes", + "responses": { + "200": { + "description": "Le référentiel a été renvoyé avec succès", + "headers": { + "Content-Range": { + "description": "Format : \"themes */size\" où size est le nombre d’éléments attendus, * si inconnu", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Referentiel" + } + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer gEoDOnecV-iQam2bxhijIkJDvfA" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JfHAwKqXzYsBXA7XWJuEYbt1Wr8" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer H37Wm18OEJlPiTmllLzE0eNUhZo" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer KzDJSNAHeWOuX1JzR-ObZ1r0t2Q" + } + } + ] + } + }, + "/v2/referentiel/typesContrats": { + "get": { + "tags": [ + "Référentiel" + ], + "summary": "Types de contrats", + "description": "Renvoie le référentiel des types de contrats", + "operationId": "recupererReferentielTypesContrats", + "responses": { + "200": { + "description": "Le référentiel a été renvoyé avec succès", + "headers": { + "Content-Range": { + "description": "Format : \"typesContrats */size\" où size est le nombre d’éléments attendus, * si inconnu", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Referentiel" + } + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer gEoDOnecV-iQam2bxhijIkJDvfA" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JfHAwKqXzYsBXA7XWJuEYbt1Wr8" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer H37Wm18OEJlPiTmllLzE0eNUhZo" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer KzDJSNAHeWOuX1JzR-ObZ1r0t2Q" + } + } + ] + } + } + }, + "components": { + "schemas": { + "Agence": { + "type": "object", + "properties": { + "telephone": { + "type": "string", + "description": "N° de téléphone de l’agence France Travail", + "example": "06 12 34 56 78" + }, + "courriel": { + "type": "string", + "description": "Le courriel de l'agence n'est plus affiché pour des raisons de sécurité, le champ fournit désormais le lien vers l'offre sur le site FranceTravail.fr afin de connaitre les modalités pour postuler", + "example": "Pour postuler, utiliser le lien suivant : https://candidat.francetravail.fr/offres/recherche/detail/XXXXXXX" + } + }, + "description": "Agence France Travail" + }, + "Agregation": { + "type": "object", + "properties": { + "valeurPossible": { + "type": "string", + "description": "Valeur possible du filtre", + "example": "E1" + }, + "nbResultats": { + "type": "integer", + "description": "Nombre de résultats attendus pour cette valeur", + "format": "int32", + "example": 45 + } + }, + "description": "Agrégations" + }, + "Competence": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code de la compétence", + "example": "483320" + }, + "libelle": { + "type": "string", + "description": "Libellé de la compétence", + "example": "Maintenir un environnement de travail propre et organisé" + }, + "exigence": { + "type": "string", + "description": "E : la compétence est exigée, S : la compétence est souhaitée", + "example": "E" + } + }, + "description": "Compétences" + }, + "Contact": { + "type": "object", + "properties": { + "nom": { + "type": "string", + "description": "Nom du recruteur", + "example": "Etienne Dupont" + }, + "coordonnees1": { + "type": "string", + "description": "Adresse du recruteur", + "example": "12 impasse du caillou" + }, + "coordonnees2": { + "type": "string", + "description": "Adresse du recruteur" + }, + "coordonnees3": { + "type": "string", + "description": "Adresse du recruteur" + }, + "telephone": { + "type": "string", + "description": "N° de téléphone du recruteur", + "example": "06 12 34 56 78" + }, + "courriel": { + "type": "string", + "description": "Le courriel du recruteur n'est plus affiché pour des raisons de sécurité, le champ fournit désormais le lien vers l'offre sur le site FranceTravail.fr afin de connaitre les modalités pour postuler", + "example": "Pour postuler, utiliser le lien suivant : https://candidat.francetravail.fr/offres/recherche/detail/XXXXXXX" + }, + "commentaire": { + "type": "string", + "description": "Précision sur le contact de l’offre", + "example": "A contacter après 19h" + }, + "urlRecruteur": { + "type": "string", + "description": "URL du recruteur", + "example": "https://boulanger-austral.net" + }, + "urlPostulation": { + "type": "string", + "description": "URL du formulaire de postulation", + "example": "https://boulanger-austral.net/carrieres" + } + }, + "description": "Contact" + }, + "ContexteTravail": { + "type": "object", + "properties": { + "horaires": { + "type": "array", + "description": "Liste des horaires du contexte de travail", + "example": "35H Travail le samedi", + "items": { + "type": "string", + "description": "Liste des horaires du contexte de travail", + "example": "35H Travail le samedi" + } + }, + "conditionsExercice": { + "type": "array", + "description": "Liste des conditions d'exercice du contexte de travail", + "example": "Port de tenue professionnelle ou d'uniforme", + "items": { + "type": "string", + "description": "Liste des conditions d'exercice du contexte de travail", + "example": "Port de tenue professionnelle ou d'uniforme" + } + } + }, + "description": "Ensemble des contextes de travail (horaires et exercices)" + }, + "Entreprise": { + "type": "object", + "properties": { + "nom": { + "type": "string", + "description": "Nom de l’entreprise", + "example": "Le boulanger austral" + }, + "description": { + "type": "string", + "description": "Description de l’entreprise", + "example": "Votre nouvelle boulangerie locale" + }, + "logo": { + "type": "string", + "description": "URL du logo de l’entreprise", + "example": "https://boulanger-austral.net/logo.png" + }, + "url": { + "type": "string", + "description": "URL du site de l’entreprise", + "example": "https://boulanger-austral.net" + }, + "entrepriseAdaptee": { + "type": "boolean", + "description": "Flag entreprise adaptee", + "example": true + } + }, + "description": "Entreprise" + }, + "FiltrePossible": { + "type": "object", + "properties": { + "filtre": { + "type": "string", + "description": "Nom du filtre", + "example": "natureContrat" + }, + "agregation": { + "type": "array", + "description": "Agrégations", + "items": { + "$ref": "#/components/schemas/Agregation" + } + } + }, + "description": "Liste des filtres supplémentaires possibles" + }, + "Formation": { + "type": "object", + "properties": { + "codeFormation": { + "type": "string", + "description": "Code du domaine de formation souhaité", + "example": "21538" + }, + "domaineLibelle": { + "type": "string", + "description": "Domaine de formation souhaité", + "example": "boulangerie" + }, + "niveauLibelle": { + "type": "string", + "description": "Niveau de formation souhaité", + "example": "CAP, BEP et équivalents" + }, + "commentaire": { + "type": "string", + "description": "Commentaire sur la formation", + "example": "Mention bien souhaitée" + }, + "exigence": { + "type": "string", + "description": "E : la formation est exigée, S : la formation est souhaitée", + "example": "E" + } + }, + "description": "Formations" + }, + "Langue": { + "type": "object", + "properties": { + "libelle": { + "type": "string", + "description": "Langue souhaitée", + "example": "Anglais" + }, + "exigence": { + "type": "string", + "description": "E : la langue est exigée, S : la langue est souhaitée", + "example": "E" + } + }, + "description": "Langues" + }, + "LieuTravail": { + "type": "object", + "properties": { + "libelle": { + "type": "string", + "description": "Libellé du lieu de travail", + "example": "74 - ANNECY" + }, + "latitude": { + "type": "number", + "description": "Latitude du lieu de travail", + "format": "double", + "example": 45.901584 + }, + "longitude": { + "type": "number", + "description": "Longitude de lieu de travail", + "format": "double", + "example": 6.125296 + }, + "codePostal": { + "type": "string", + "description": "Code postal du lieu de travail", + "example": "74000" + }, + "commune": { + "type": "string", + "description": "Code Insee du lieu de travail", + "example": "74010" + } + }, + "description": "Lieu de travail" + }, + "Offre": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Identifiant de l’offre d’emploi", + "example": "048KLTP" + }, + "intitule": { + "type": "string", + "description": "Intitulé de l’offre", + "example": "Boulanger / Boulangère (H/F)" + }, + "description": { + "type": "string", + "description": "Description de l’offre", + "example": "Nous rechercons un/e Boulanger/ère pour notre nouveau magasin." + }, + "dateCreation": { + "type": "string", + "description": "Date de création de l’offre", + "format": "date-time", + "example": "2022-10-23T08:15:42Z" + }, + "dateActualisation": { + "type": "string", + "description": "Date de dernière actualisation de l'offre", + "format": "date-time", + "example": "2022-10-23T08:15:42Z" + }, + "lieuTravail": { + "$ref": "#/components/schemas/LieuTravail" + }, + "romeCode": { + "type": "string", + "description": "Code ROME de l’offre", + "example": "D1102" + }, + "romeLibelle": { + "type": "string", + "description": "Libellé associé au code ROME", + "example": "Boulanger / Boulangère" + }, + "appellationlibelle": { + "type": "string", + "description": "Libellé de l’appellation ROME de l’offre", + "example": "Boulanger / Boulangère" + }, + "entreprise": { + "$ref": "#/components/schemas/Entreprise" + }, + "typeContrat": { + "type": "string", + "description": "Code du type de contrat proposé (CDD, CDI, etc.)", + "example": "CDD" + }, + "typeContratLibelle": { + "type": "string", + "description": "Libellé du type de contrat proposé", + "example": "CDD - 6 Mois" + }, + "natureContrat": { + "type": "string", + "description": "Nature du contrat (contrat d’apprentissage, etc.)", + "example": "Contrat travail" + }, + "experienceExige": { + "type": "string", + "description": "D : débutant accepté, E : l’expérience est exigée, S : l’expérience est souhaitée", + "example": "D" + }, + "experienceLibelle": { + "type": "string", + "description": "Libellé de l’expérience", + "example": "Débutant accepté" + }, + "experienceCommentaire": { + "type": "string", + "description": "Commentaire sur l’expérience", + "example": "Expérience dans la vente souhaitée" + }, + "formations": { + "type": "array", + "description": "Formations", + "items": { + "$ref": "#/components/schemas/Formation" + } + }, + "langues": { + "type": "array", + "description": "Langues", + "items": { + "$ref": "#/components/schemas/Langue" + } + }, + "permis": { + "type": "array", + "description": "Permis", + "items": { + "$ref": "#/components/schemas/Permis" + } + }, + "outilsBureautiques": { + "type": "array", + "description": "Liste des outils bureautiques utilisés", + "example": "Traitement de texte", + "items": { + "type": "string", + "description": "Liste des outils bureautiques utilisés", + "example": "Traitement de texte" + } + }, + "competences": { + "type": "array", + "description": "Compétences", + "items": { + "$ref": "#/components/schemas/Competence" + } + }, + "salaire": { + "$ref": "#/components/schemas/Salaire" + }, + "dureeTravailLibelle": { + "type": "string", + "description": "Libellé de la durée de travail", + "example": "35H" + }, + "dureeTravailLibelleConverti": { + "type": "string", + "description": "Temps plein ou temps partiel", + "example": "Temps plein" + }, + "complementExercice": { + "type": "string", + "description": "Complément exercice", + "example": "Gestion de la comptabilité" + }, + "conditionExercice": { + "type": "string", + "description": "Conditions d'exercice", + "example": "Travail de nuit" + }, + "alternance": { + "type": "boolean", + "description": "Vrai si c’est une offre pour de l’alternance", + "example": false + }, + "contact": { + "$ref": "#/components/schemas/Contact" + }, + "agence": { + "$ref": "#/components/schemas/Agence" + }, + "nombrePostes": { + "type": "integer", + "description": "Nombre de postes disponibles pour cette offre", + "format": "int32", + "example": 3 + }, + "accessibleTH": { + "type": "boolean", + "description": "Vrai si l’offre est accessible aux travailleurs handicapés", + "example": true + }, + "deplacementCode": { + "type": "string", + "description": "Code de la fréquence des déplacements", + "example": "1" + }, + "deplacementLibelle": { + "type": "string", + "description": "Description des déplacements demandés", + "example": "Jamais" + }, + "qualificationCode": { + "type": "string", + "description": "Qualification du poste. Pour la qualification, on remonte les 9 valeurs 1 - manœuvre, ..., 8 - agent de maitrise, 9 - cadre", + "example": "6" + }, + "qualificationLibelle": { + "type": "string", + "description": "Libellé de la qualification du poste", + "example": "Employé qualifié" + }, + "codeNAF": { + "type": "string", + "description": "Code NAF (Code APE)", + "example": "10.71C" + }, + "secteurActivite": { + "type": "string", + "description": "Division NAF (comprend les deux premiers chiffre du code NAF)", + "example": "10" + }, + "secteurActiviteLibelle": { + "type": "string", + "description": "Secteur d’activité de l’offre", + "example": "Boulangerie et boulangerie-pâtisserie" + }, + "qualitesProfessionnelles": { + "type": "array", + "description": "Qualités professionnelles", + "items": { + "$ref": "#/components/schemas/QualitePro" + } + }, + "trancheEffectifEtab": { + "type": "string", + "description": "Libellé de la tranche d'effectif de l'établissement", + "example": "1 à 5 employés" + }, + "origineOffre": { + "$ref": "#/components/schemas/OrigineOffre" + }, + "offresManqueCandidats": { + "type": "boolean", + "description": "Vrai si c'est une offre difficile à pourvoir", + "example": true + }, + "contexteTravail": { + "$ref": "#/components/schemas/ContexteTravail" + } + } + }, + "OrigineOffre": { + "type": "object", + "properties": { + "origine": { + "type": "string", + "description": "Origine de l’offre. 1 : France Tavail, 2 - Partenaire", + "example": "2" + }, + "urlOrigine": { + "type": "string", + "description": "URL de l’offre sur les sites des partenaires", + "example": "https://partenaire-offre.net/boulanger-austral-46841" + }, + "partenaires": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PartenaireOffre" + } + } + }, + "description": "Origine de l'offre" + }, + "PartenaireOffre": { + "type": "object", + "properties": { + "nom": { + "type": "string", + "description": "Nom du partenaire", + "example": "PARTENAIRE1" + }, + "url": { + "type": "string", + "description": "URL de l’offre sur les sites des partenaires", + "example": "https://partenaire-offre.net/boulanger-austral-46841" + }, + "logo": { + "type": "string", + "description": "URL du logo sur les sites des partenaires", + "example": "https://partenaire-offre.net/logo.png" + } + } + }, + "Permis": { + "type": "object", + "properties": { + "libelle": { + "type": "string", + "description": "Permis souhaité", + "example": "B - Véhicule léger" + }, + "exigence": { + "type": "string", + "description": "E : le permis est exigé, S : le permis est souhaité", + "example": "S" + } + }, + "description": "Permis" + }, + "QualitePro": { + "type": "object", + "properties": { + "libelle": { + "type": "string", + "description": "Libellé de la qualité professionnelle demandée", + "example": "Faire preuve d'autonomie" + }, + "description": { + "type": "string", + "description": "Description de la qualité professionnelle demandée", + "example": "Capacité à prendre en charge son activité sans devoir être encadré de façon continue." + } + }, + "description": "Qualités professionnelles" + }, + "ResultatRecherche": { + "type": "object", + "properties": { + "resultats": { + "type": "array", + "description": "Liste des offres retournées", + "items": { + "$ref": "#/components/schemas/Offre" + } + }, + "filtresPossibles": { + "type": "array", + "description": "Liste des filtres supplémentaires possibles", + "items": { + "$ref": "#/components/schemas/FiltrePossible" + } + } + } + }, + "Salaire": { + "type": "object", + "properties": { + "libelle": { + "type": "string", + "description": "Libellé du salaire", + "example": "Mensuel de 1923.00 Euros sur 12 mois" + }, + "commentaire": { + "type": "string", + "description": "Commentaire sur le salaire", + "example": "Selon expérience" + }, + "complement1": { + "type": "string", + "description": "Complément 1 de rémunération (prime, véhicule, ...)", + "example": "Véhicule de fonction" + }, + "complement2": { + "type": "string", + "description": "Complément 2 de rémunération (prime, véhicule, ...)", + "example": "Prime de vacances" + } + }, + "description": "Salaire" + }, + "Referentiel": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code du référentiel", + "example": "01" + }, + "libelle": { + "type": "string", + "description": "Libellé associé au code", + "example": "Libellé" + } + } + }, + "Commune": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code INSEE de la commune", + "example": "21704" + }, + "libelle": { + "type": "string", + "description": "Nom de la commune", + "example": "VILLIERS LE DUC" + }, + "codePostal": { + "type": "string", + "description": "Code postal de la commune", + "example": "21400" + }, + "codeDepartement": { + "type": "string", + "description": "Code du département de la commune", + "example": "21" + } + } + }, + "Departement": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code du département", + "example": "01" + }, + "libelle": { + "type": "string", + "description": "Nom du département", + "example": "Ain" + }, + "region": { + "$ref": "#/components/schemas/Region" + } + } + }, + "Region": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code de la région", + "example": "84" + }, + "libelle": { + "type": "string", + "description": "Nom de la région", + "example": "Auvergne-Rhône-Alpes" + } + } + } + }, + "securitySchemes": { + "authentification": { + "type": "oauth2", + "flows": { + "clientCredentials": { + "tokenUrl": "https://entreprise.francetravail.fr/connexion/oauth2/access_token", + "scopes": { + "o2dsoffre": "Obligatoire" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/backend/api/rome_4_competences.json b/backend/api/rome_4_competences.json new file mode 100644 index 0000000..40a2a61 --- /dev/null +++ b/backend/api/rome_4_competences.json @@ -0,0 +1,4017 @@ +{ + "openapi": "3.0.1", + "info": { + "version": "1", + "title": "ROME 4.0 - Compétences", + "description": "Référentiel des capacités, ou des ensembles de connaissances, d'aptitudes, d'attitudes et de comportements, qui permettent à une personne d'accomplir une tâche ou de résoudre un problème de manière efficace.
Une compétence désigne la capacité à agir dans une situation professionnelle donnée, en mobilisant et en combinant des ressources telles que:
\r\n\r\n**Scopes** : `api_rome-competencesv1`,`nomenclatureRome`\r\n\r\n**Royaume** : `/partenaire`" + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences" + } + ], + "paths": { + "/v1/competences/categorie-savoirs": { + "get": { + "tags": [ + "Catégorie de savoirs" + ], + "summary": "Lister les catégories de savoirs", + "description": "Permet d'obtenir la liste des catégories de savoirs.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "listerCategorieSavoirs", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "categorie(libelle,code)", + "code", + "datefin", + "libelle", + "obsolete", + "savoirs(libelle,code,transitionecologique,transitionnumerique,codeogr)", + "souscategories(libelle,code)" + ], + "example": "libelle,code" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer hITtO43KJEaw3-ODjpX7CzU3opQ" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des catégories de savoir.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CategorieSavoir" + } + }, + "examples": { + "Retour complet": { + "value": [ + { + "libelle": "Véhicules", + "categorie": { + "libelle": "Véhicules", + "code": "30" + }, + "sousCategories": [ + { + "libelle": "Véhicules", + "code": "30" + } + ], + "obsolete": false, + "code": "30", + "savoirs": [ + { + "type": "SAVOIR", + "libelle": "Anglais maritime", + "code": "100253", + "transitionEcologique": false, + "transitionNumerique": false, + "codeOgr": "100253" + } + ], + "dateFin": "2024-02-23T14:40:14.848Z" + } + ] + }, + "Retour par défaut": { + "value": [ + { + "libelle": "Véhicules", + "code": "30" + } + ] + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences", + "description": "PROD" + } + ] + } + }, + "/v1/competences/categorie-savoirs/{code}": { + "get": { + "tags": [ + "Catégorie de savoirs" + ], + "summary": "Lire une catégorie de savoirs", + "description": "Permet de lire une catégorie de savoirs depuis son code.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "lireCategorieSavoir", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "categorie(libelle,code)", + "code", + "datefin", + "libelle", + "obsolete", + "savoirs(libelle,code,transitionecologique,transitionnumerique,codeogr)", + "souscategories(libelle,code)" + ], + "example": "libelle,categorie(libelle,code),obsolete,code,datefin" + } + }, + { + "name": "date", + "in": "query", + "description": "Date de la recherche au format yyyy-MM-dd ou yyyyMMdd.", + "required": false, + "schema": { + "type": "string", + "format": "date", + "example": "2022-05-28" + } + }, + { + "name": "code", + "in": "path", + "description": "Code de la catégorie de savoirs.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer hITtO43KJEaw3-ODjpX7CzU3opQ" + } + } + ], + "responses": { + "200": { + "description": "Retourne les données d'une catégorie de savoir.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CategorieSavoir" + }, + "examples": { + "Retour complet": { + "value": { + "libelle": "Véhicules", + "categorie": { + "libelle": "Véhicules", + "code": "30" + }, + "sousCategories": [ + { + "libelle": "Véhicules", + "code": "30" + } + ], + "obsolete": false, + "code": "30", + "savoirs": [ + { + "type": "SAVOIR", + "libelle": "Anglais maritime", + "code": "100253", + "transitionEcologique": false, + "transitionNumerique": false, + "codeOgr": "100253" + } + ], + "dateFin": "2024-02-23T14:40:14.848Z" + } + }, + "Retour par défaut": { + "value": { + "libelle": "Véhicules", + "categorie": { + "libelle": "Véhicules", + "code": "30" + }, + "obsolete": false, + "code": "30", + "dateFin": "2024-02-23T14:40:14.848Z" + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "service": "/v1/mon_uri", + "message": "Code inexistant: monCode", + "code": 404 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences", + "description": "PROD" + } + ] + } + }, + "/v1/competences/competence": { + "get": { + "tags": [ + "Compétence" + ], + "summary": "Lister les compétences", + "description": "Permet de lister les compétences au sens général.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "listerCompetences", + "parameters": [ + { + "name": "code-ogr", + "in": "query", + "description": "Code OGR.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "@competencedetaillee(riasecmineur,macrocompetence(libelle,transferable,@macrosavoiretreprofessionnel(qualiteprofessionnelle),souscategorie,code,riasecmineur,codearborescence,objectif(libelle,enjeu(libelle,code,codearborescence,domainecompetence(libelle,code,codearborescence)),code,codearborescence),codeogr,maturite,riasecmajeur),riasecmajeur)", + "@macrocompetence(transferable,@macrosavoiretreprofessionnel(qualiteprofessionnelle),souscategorie,riasecmineur,codearborescence,objectif(libelle,enjeu(libelle,code,codearborescence,domainecompetence(libelle,code,codearborescence)),code,codearborescence),maturite,riasecmajeur)", + "@savoir(categoriesavoir(libelle,categorie(libelle,code),code))", + "code", + "codeogr", + "competenceesco(libelle,uri)", + "datefin", + "libelle", + "obsolete", + "transitionecologique", + "transitionnumerique" + ], + "example": "libelle,code" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer hITtO43KJEaw3-ODjpX7CzU3opQ" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des compétences.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CompetenceDetaillee" + }, + { + "$ref": "#/components/schemas/MacroCompetence" + }, + { + "$ref": "#/components/schemas/Savoir" + } + ] + } + }, + "examples": { + "Retour complet": { + "value": [ + { + "type": "string", + "libelle": "Anglais maritime", + "riasecMineur": "R", + "macroCompetence": { + "type": "MACRO-COMPETENCE", + "libelle": "Anglais maritime", + "transferable": false, + "qualiteProfessionnelle": "01", + "sousCategorie": "TECHNIQUE", + "code": "100253", + "riasecMineur": "R", + "codeArborescence": "string", + "objectif": { + "libelle": "Soigner des animaux", + "enjeu": { + "libelle": "Soin", + "code": "7", + "codeArborescence": "1E", + "domaineCompetence": { + "libelle": "Management, Social, Soin", + "code": "1", + "codeArborescence": "1" + } + }, + "code": "19", + "codeArborescence": "1E4" + }, + "codeOgr": "100253", + "maturite": "HETEROGENE", + "riasecMajeur": "R" + }, + "riasecMajeur": "R", + "obsolete": false, + "code": "100253", + "competenceEsco": { + "libelle": "abattre des arbres", + "uri": "http://data.europa.eu/esco/skill/b8cfe3d0-15a7-4be4-a7f1-f5141ed11f16" + }, + "transitionEcologique": false, + "transitionNumerique": false, + "codeOgr": "100253", + "transferable": false, + "qualiteProfessionnelle": "01", + "sousCategorie": "TECHNIQUE", + "codeArborescence": "string", + "objectif": { + "libelle": "Soigner des animaux", + "enjeu": { + "libelle": "Soin", + "code": "7", + "codeArborescence": "1E", + "domaineCompetence": { + "libelle": "Management, Social, Soin", + "code": "1", + "codeArborescence": "1" + } + }, + "code": "19", + "codeArborescence": "1E4" + }, + "maturite": "HETEROGENE", + "categorieSavoir": { + "libelle": "Véhicules", + "categorie": { + "libelle": "Véhicules", + "code": "30" + }, + "code": "30" + }, + "dateFin": "2024-02-23T14:40:14.848Z" + } + ] + }, + "Retour par défaut": { + "value": [ + { + "type": "string", + "libelle": "Anglais maritime", + "code": "100253" + } + ] + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences", + "description": "PROD" + } + ] + } + }, + "/v1/competences/competence-detaillee": { + "get": { + "tags": [ + "Compétence détaillée" + ], + "summary": "Lister les compétences", + "description": "Permet de lister les compétences de type compétences détaillées.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "listerCompetencesDetaillees", + "parameters": [ + { + "name": "code-ogr", + "in": "query", + "description": "Code OGR.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "riasec-majeur", + "in": "query", + "description": "Riasec majeur.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "riasec-mineur", + "in": "query", + "description": "Riasec mineur.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "code", + "codeogr", + "competenceesco(libelle,uri)", + "datefin", + "libelle", + "macrocompetence(libelle,transferable,@macrosavoiretreprofessionnel(qualiteprofessionnelle),souscategorie,code,riasecmineur,codearborescence,objectif(libelle,enjeu(libelle,code,codearborescence,domainecompetence(libelle,code,codearborescence)),code,codearborescence),codeogr,maturite,riasecmajeur)", + "obsolete", + "riasecmajeur", + "riasecmineur", + "transitionecologique", + "transitionnumerique" + ], + "example": "libelle,code" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer hITtO43KJEaw3-ODjpX7CzU3opQ" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des compétences détaillées.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CompetenceDetaillee" + } + }, + "examples": { + "Retour complet": { + "value": [ + { + "type": "COMPETENCE-DETAILLEE", + "libelle": "Anglais maritime", + "obsolete": false, + "code": "100253", + "competenceEsco": { + "libelle": "abattre des arbres", + "uri": "http://data.europa.eu/esco/skill/b8cfe3d0-15a7-4be4-a7f1-f5141ed11f16" + }, + "riasecMineur": "R", + "transitionEcologique": false, + "transitionNumerique": false, + "codeOgr": "100253", + "macroCompetence": { + "type": "MACRO-COMPETENCE", + "libelle": "Anglais maritime", + "transferable": false, + "qualiteProfessionnelle": "01", + "sousCategorie": "TECHNIQUE", + "code": "100253", + "riasecMineur": "R", + "codeArborescence": "string", + "objectif": { + "libelle": "Soigner des animaux", + "enjeu": { + "libelle": "Soin", + "code": "7", + "codeArborescence": "1E", + "domaineCompetence": { + "libelle": "Management, Social, Soin", + "code": "1", + "codeArborescence": "1" + } + }, + "code": "19", + "codeArborescence": "1E4" + }, + "codeOgr": "100253", + "maturite": "HETEROGENE", + "riasecMajeur": "R" + }, + "riasecMajeur": "R", + "dateFin": "2024-02-23T14:40:14.848Z" + } + ] + }, + "Retour par défaut": { + "value": [ + { + "type": "COMPETENCE-DETAILLEE", + "libelle": "Anglais maritime", + "code": "100253" + } + ] + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences", + "description": "PROD" + } + ] + } + }, + "/v1/competences/competence-detaillee/{code}": { + "get": { + "tags": [ + "Compétence détaillée" + ], + "summary": "Lire une compétence détaillée", + "description": "Permet la lecture d'une compétence de type compétence détaillée depuis son code.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "lireCompetenceDetaillee", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "code", + "codeogr", + "competenceesco(libelle,uri)", + "datefin", + "libelle", + "macrocompetence(libelle,transferable,@macrosavoiretreprofessionnel(qualiteprofessionnelle),souscategorie,code,riasecmineur,definition,codearborescence,objectif(libelle,enjeu(libelle,code,codearborescence,domainecompetence(libelle,code,codearborescence)),code,codearborescence),codeogr,maturite,riasecmajeur)", + "obsolete", + "riasecmajeur", + "riasecmineur", + "transitionecologique", + "transitionnumerique" + ], + "example": "libelle,obsolete,code,competenceesco(libelle,uri),riasecmineur,transitionecologique,transitionnumerique,codeogr,macrocompetence(libelle,transferable,souscategorie,code,riasecmineur,definition,codeogr,maturite,riasecmajeur,@macrosavoiretreprofessionnel(qualiteprofessionnelle),codearborescence,objectif(codearborescence,libelle,enjeu(codearborescence,libelle,code,domainecompetence(codearborescence,libelle,code)),code)),riasecmajeur,datefin" + } + }, + { + "name": "date", + "in": "query", + "description": "Date de la recherche au format yyyy-MM-dd ou yyyyMMdd.", + "required": false, + "schema": { + "type": "string", + "format": "date", + "example": "2022-05-28" + } + }, + { + "name": "code", + "in": "path", + "description": "Code compétence.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer hITtO43KJEaw3-ODjpX7CzU3opQ" + } + } + ], + "responses": { + "200": { + "description": "Retourne les données de la compétence détaillée renseignée.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CompetenceDetaillee" + }, + "examples": { + "Retour complet": { + "value": { + "type": "COMPETENCE-DETAILLEE", + "libelle": "Anglais maritime", + "obsolete": false, + "code": "100253", + "competenceEsco": { + "libelle": "abattre des arbres", + "uri": "http://data.europa.eu/esco/skill/b8cfe3d0-15a7-4be4-a7f1-f5141ed11f16" + }, + "riasecMineur": "R", + "transitionEcologique": false, + "transitionNumerique": false, + "codeOgr": "100253", + "macroCompetence": { + "type": "MACRO-COMPETENCE", + "libelle": "Anglais maritime", + "transferable": false, + "qualiteProfessionnelle": "01", + "sousCategorie": "TECHNIQUE", + "code": "100253", + "riasecMineur": "R", + "definition": "string", + "codeArborescence": "string", + "objectif": { + "libelle": "Soigner des animaux", + "enjeu": { + "libelle": "Soin", + "code": "7", + "codeArborescence": "1E", + "domaineCompetence": { + "libelle": "Management, Social, Soin", + "code": "1", + "codeArborescence": "1" + } + }, + "code": "19", + "codeArborescence": "1E4" + }, + "codeOgr": "100253", + "maturite": "HETEROGENE", + "riasecMajeur": "R" + }, + "riasecMajeur": "R", + "dateFin": "2024-02-23T14:40:14.848Z" + } + }, + "Retour par défaut": { + "value": { + "type": "COMPETENCE-DETAILLEE", + "libelle": "Anglais maritime", + "obsolete": false, + "code": "100253", + "competenceEsco": { + "libelle": "abattre des arbres", + "uri": "http://data.europa.eu/esco/skill/b8cfe3d0-15a7-4be4-a7f1-f5141ed11f16" + }, + "riasecMineur": "R", + "transitionEcologique": false, + "transitionNumerique": false, + "codeOgr": "100253", + "macroCompetence": { + "type": "MACRO-COMPETENCE", + "libelle": "Anglais maritime", + "transferable": false, + "sousCategorie": "TECHNIQUE", + "code": "100253", + "riasecMineur": "R", + "definition": "string", + "codeOgr": "100253", + "maturite": "HETEROGENE", + "riasecMajeur": "R", + "qualiteProfessionnelle": "01", + "codeArborescence": "string", + "objectif": { + "codeArborescence": "1E4", + "libelle": "Soigner des animaux", + "enjeu": { + "codeArborescence": "1E", + "libelle": "Soin", + "code": "7", + "domaineCompetence": { + "codeArborescence": "1", + "libelle": "Management, Social, Soin", + "code": "1" + } + }, + "code": "19" + } + }, + "riasecMajeur": "R", + "dateFin": "2024-02-23T14:40:14.848Z" + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "service": "/v1/mon_uri", + "message": "Code inexistant: monCode", + "code": 404 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences", + "description": "PROD" + } + ] + } + }, + "/v1/competences/competence/{code}": { + "get": { + "tags": [ + "Compétence" + ], + "summary": "Lire une compétence", + "description": "Permet la lecture d'une compétence depuis son code.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "lireCompetence", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "@competencedetaillee(riasecmineur,macrocompetence(libelle,transferable,@macrosavoiretreprofessionnel(qualiteprofessionnelle),souscategorie,code,riasecmineur,definition,codearborescence,objectif(libelle,enjeu(libelle,code,codearborescence,domainecompetence(libelle,code,codearborescence)),code,codearborescence),codeogr,maturite,riasecmajeur),riasecmajeur)", + "@macrocompetence(competences(libelle,@competencedetaillee(riasecmineur,riasecmajeur),code,transitionecologique,transitionnumerique,codeogr,@macrocompetence(riasecmineur,riasecmajeur)),transferable,@macrosavoiretreprofessionnel(qualiteprofessionnelle),souscategorie,riasecmineur,definition,codearborescence,objectif(libelle,enjeu(libelle,code,codearborescence,domainecompetence(libelle,code,codearborescence)),code,codearborescence),maturite,riasecmajeur)", + "@savoir(categoriesavoir(libelle,categorie(libelle,code),code))", + "code", + "codeogr", + "competenceesco(libelle,uri)", + "datefin", + "libelle", + "obsolete", + "transitionecologique", + "transitionnumerique" + ], + "example": "libelle,@competencedetaillee(macrocompetence(libelle,transferable,souscategorie,code,riasecmineur,definition,codeogr,maturite,riasecmajeur,@macrosavoiretreprofessionnel(qualiteprofessionnelle),codearborescence,objectif(codearborescence,libelle,enjeu(codearborescence,libelle,code,domainecompetence(codearborescence,libelle,code)),code)),riasecmajeur,riasecmineur),obsolete,code,competenceesco(libelle,uri),transitionecologique,transitionnumerique,codeogr,@macrocompetence(transferable,@macrosavoiretreprofessionnel(qualiteprofessionnelle),souscategorie,riasecmineur,definition,codearborescence,objectif(codearborescence,libelle,enjeu(codearborescence,libelle,code,domainecompetence(codearborescence,libelle,code)),code),maturite,riasecmajeur),@savoir(categoriesavoir(libelle,categorie(libelle,code),code)),datefin" + } + }, + { + "name": "date", + "in": "query", + "description": "Date de la recherche au format yyyy-MM-dd ou yyyyMMdd.", + "required": false, + "schema": { + "type": "string", + "format": "date", + "example": "2022-05-28" + } + }, + { + "name": "code", + "in": "path", + "description": "Code compétence.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer hITtO43KJEaw3-ODjpX7CzU3opQ" + } + } + ], + "responses": { + "200": { + "description": "Retourne les données de la compétence renseignée.", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/CompetenceDetaillee" + }, + { + "$ref": "#/components/schemas/MacroCompetence" + }, + { + "$ref": "#/components/schemas/Savoir" + } + ] + }, + "examples": { + "Retour complet": { + "value": { + "type": "string", + "libelle": "Anglais maritime", + "riasecMineur": "R", + "macroCompetence": { + "type": "MACRO-COMPETENCE", + "libelle": "Anglais maritime", + "transferable": false, + "qualiteProfessionnelle": "01", + "sousCategorie": "TECHNIQUE", + "code": "100253", + "riasecMineur": "R", + "definition": "string", + "codeArborescence": "string", + "objectif": { + "libelle": "Soigner des animaux", + "enjeu": { + "libelle": "Soin", + "code": "7", + "codeArborescence": "1E", + "domaineCompetence": { + "libelle": "Management, Social, Soin", + "code": "1", + "codeArborescence": "1" + } + }, + "code": "19", + "codeArborescence": "1E4" + }, + "codeOgr": "100253", + "maturite": "HETEROGENE", + "riasecMajeur": "R" + }, + "riasecMajeur": "R", + "obsolete": false, + "code": "100253", + "competenceEsco": { + "libelle": "abattre des arbres", + "uri": "http://data.europa.eu/esco/skill/b8cfe3d0-15a7-4be4-a7f1-f5141ed11f16" + }, + "transitionEcologique": false, + "transitionNumerique": false, + "codeOgr": "100253", + "competences": [ + { + "type": "string", + "libelle": "Anglais maritime", + "riasecMineur": "R", + "riasecMajeur": "R", + "code": "100253", + "transitionEcologique": false, + "transitionNumerique": false, + "codeOgr": "100253" + } + ], + "transferable": false, + "qualiteProfessionnelle": "01", + "sousCategorie": "TECHNIQUE", + "definition": "string", + "codeArborescence": "string", + "objectif": { + "libelle": "Soigner des animaux", + "enjeu": { + "libelle": "Soin", + "code": "7", + "codeArborescence": "1E", + "domaineCompetence": { + "libelle": "Management, Social, Soin", + "code": "1", + "codeArborescence": "1" + } + }, + "code": "19", + "codeArborescence": "1E4" + }, + "maturite": "HETEROGENE", + "categorieSavoir": { + "libelle": "Véhicules", + "categorie": { + "libelle": "Véhicules", + "code": "30" + }, + "code": "30" + }, + "dateFin": "2024-02-23T14:40:14.848Z" + } + }, + "Retour par défaut": { + "value": { + "type": "string", + "libelle": "Anglais maritime", + "macroCompetence": { + "type": "MACRO-COMPETENCE", + "libelle": "Anglais maritime", + "transferable": false, + "sousCategorie": "TECHNIQUE", + "code": "100253", + "riasecMineur": "R", + "definition": "string", + "codeOgr": "100253", + "maturite": "HETEROGENE", + "riasecMajeur": "R", + "qualiteProfessionnelle": "01", + "codeArborescence": "string", + "objectif": { + "codeArborescence": "1E4", + "libelle": "Soigner des animaux", + "enjeu": { + "codeArborescence": "1E", + "libelle": "Soin", + "code": "7", + "domaineCompetence": { + "codeArborescence": "1", + "libelle": "Management, Social, Soin", + "code": "1" + } + }, + "code": "19" + } + }, + "riasecMajeur": "R", + "riasecMineur": "R", + "obsolete": false, + "code": "100253", + "competenceEsco": { + "libelle": "abattre des arbres", + "uri": "http://data.europa.eu/esco/skill/b8cfe3d0-15a7-4be4-a7f1-f5141ed11f16" + }, + "transitionEcologique": false, + "transitionNumerique": false, + "codeOgr": "100253", + "transferable": false, + "qualiteProfessionnelle": "01", + "sousCategorie": "TECHNIQUE", + "definition": "string", + "codeArborescence": "string", + "objectif": { + "codeArborescence": "1E4", + "libelle": "Soigner des animaux", + "enjeu": { + "codeArborescence": "1E", + "libelle": "Soin", + "code": "7", + "domaineCompetence": { + "codeArborescence": "1", + "libelle": "Management, Social, Soin", + "code": "1" + } + }, + "code": "19" + }, + "maturite": "HETEROGENE", + "categorieSavoir": { + "libelle": "Véhicules", + "categorie": { + "libelle": "Véhicules", + "code": "30" + }, + "code": "30" + }, + "dateFin": "2024-02-23T14:40:14.848Z" + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "service": "/v1/mon_uri", + "message": "Code inexistant: monCode", + "code": 404 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences", + "description": "PROD" + } + ] + } + }, + "/v1/competences/domaine-competence": { + "get": { + "tags": [ + "Domaine de compétence" + ], + "summary": "Lister les domaines de compétence", + "description": "Permet de lister les domaines de compétence.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "listerDomainesCompetence", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "code", + "codearborescence", + "datefin", + "enjeux(objectifs(libelle,macrocompetences(libelle,transferable,@macrosavoiretreprofessionnel(qualiteprofessionnelle),souscategorie,code,riasecmineur,codearborescence,transitionecologique,transitionnumerique,codeogr,maturite,riasecmajeur),code,codearborescence),libelle,code,codearborescence)", + "libelle", + "obsolete" + ], + "example": "libelle,code" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer hITtO43KJEaw3-ODjpX7CzU3opQ" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des domaines de compétence.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DomaineCompetence" + } + }, + "examples": { + "Retour complet": { + "value": [ + { + "libelle": "Management, Social, Soin", + "obsolete": false, + "code": "1", + "codeArborescence": "1", + "enjeux": [ + { + "objectifs": [ + { + "libelle": "Soigner des animaux", + "macroCompetences": [ + { + "type": "MACRO-COMPETENCE", + "libelle": "Anglais maritime", + "transferable": false, + "qualiteProfessionnelle": "01", + "sousCategorie": "TECHNIQUE", + "code": "100253", + "riasecMineur": "R", + "codeArborescence": "string", + "transitionEcologique": false, + "transitionNumerique": false, + "codeOgr": "100253", + "maturite": "HETEROGENE", + "riasecMajeur": "R" + } + ], + "code": "19", + "codeArborescence": "1E4" + } + ], + "libelle": "Soin", + "code": "7", + "codeArborescence": "1E" + } + ], + "dateFin": "2024-02-23T14:40:14.848Z" + } + ] + }, + "Retour par défaut": { + "value": [ + { + "libelle": "Management, Social, Soin", + "code": "1" + } + ] + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences", + "description": "PROD" + } + ] + } + }, + "/v1/competences/domaine-competence/{code}": { + "get": { + "tags": [ + "Domaine de compétence" + ], + "summary": "Lire un domaine de compétence", + "description": "Permet la lecture d'un domaine de compétence depuis son code.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "lireDomaineCompetence", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "code", + "codearborescence", + "datefin", + "enjeux(objectifs(libelle,macrocompetences(libelle,transferable,souscategorie,code,riasecmineur,transitionnumerique,codeogr,maturite,riasecmajeur,competences(libelle,@competencedetaillee(riasecmineur,riasecmajeur),code,transitionecologique,transitionnumerique,codeogr,@macrocompetence(riasecmineur,riasecmajeur)),@macrosavoiretreprofessionnel(qualiteprofessionnelle),codearborescence,transitionecologique),code,codearborescence),libelle,code,codearborescence)", + "libelle", + "obsolete" + ], + "example": "libelle,obsolete,code,codearborescence,datefin" + } + }, + { + "name": "date", + "in": "query", + "description": "Date de la recherche au format yyyy-MM-dd ou yyyyMMdd.", + "required": false, + "schema": { + "type": "string", + "format": "date", + "example": "2022-05-28" + } + }, + { + "name": "code", + "in": "path", + "description": "Code du domaine de compétence.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer hITtO43KJEaw3-ODjpX7CzU3opQ" + } + } + ], + "responses": { + "200": { + "description": "Retourne les données du domaine de compétence renseigné.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DomaineCompetence" + }, + "examples": { + "Retour complet": { + "value": { + "libelle": "Management, Social, Soin", + "obsolete": false, + "code": "1", + "codeArborescence": "1", + "enjeux": [ + { + "objectifs": [ + { + "libelle": "Soigner des animaux", + "macroCompetences": [ + { + "type": "MACRO-COMPETENCE", + "libelle": "Anglais maritime", + "transferable": false, + "sousCategorie": "TECHNIQUE", + "code": "100253", + "riasecMineur": "R", + "transitionNumerique": false, + "codeOgr": "100253", + "maturite": "HETEROGENE", + "riasecMajeur": "R", + "competences": [ + { + "type": "string", + "libelle": "Anglais maritime", + "riasecMineur": "R", + "riasecMajeur": "R", + "code": "100253", + "transitionEcologique": false, + "transitionNumerique": false, + "codeOgr": "100253" + } + ], + "qualiteProfessionnelle": "01", + "codeArborescence": "string", + "transitionEcologique": false + } + ], + "code": "19", + "codeArborescence": "1E4" + } + ], + "libelle": "Soin", + "code": "7", + "codeArborescence": "1E" + } + ], + "dateFin": "2024-02-23T14:40:14.848Z" + } + }, + "Retour par défaut": { + "value": { + "libelle": "Management, Social, Soin", + "obsolete": false, + "code": "1", + "codeArborescence": "1", + "dateFin": "2024-02-23T14:40:14.848Z" + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "service": "/v1/mon_uri", + "message": "Code inexistant: monCode", + "code": 404 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences", + "description": "PROD" + } + ] + } + }, + "/v1/competences/enjeu": { + "get": { + "tags": [ + "Enjeu de compétences" + ], + "summary": "Lister les enjeux de compétences", + "description": "Permet de lister les enjeux de compétences.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "listerEnjeux", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "code", + "codearborescence", + "datefin", + "domainecompetence(libelle,code,codearborescence)", + "libelle", + "objectifs(libelle,macrocompetences(libelle,transferable,@macrosavoiretreprofessionnel(qualiteprofessionnelle),souscategorie,code,riasecmineur,codearborescence,transitionecologique,transitionnumerique,codeogr,maturite,riasecmajeur),code,codearborescence)", + "obsolete" + ], + "example": "libelle,code" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer hITtO43KJEaw3-ODjpX7CzU3opQ" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des enjeux de compétences.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Enjeu" + } + }, + "examples": { + "Retour complet": { + "value": [ + { + "objectifs": [ + { + "libelle": "Soigner des animaux", + "macroCompetences": [ + { + "type": "MACRO-COMPETENCE", + "libelle": "Anglais maritime", + "transferable": false, + "qualiteProfessionnelle": "01", + "sousCategorie": "TECHNIQUE", + "code": "100253", + "riasecMineur": "R", + "codeArborescence": "string", + "transitionEcologique": false, + "transitionNumerique": false, + "codeOgr": "100253", + "maturite": "HETEROGENE", + "riasecMajeur": "R" + } + ], + "code": "19", + "codeArborescence": "1E4" + } + ], + "libelle": "Soin", + "obsolete": false, + "code": "7", + "codeArborescence": "1E", + "dateFin": "2024-02-23T14:40:14.848Z", + "domaineCompetence": { + "libelle": "Management, Social, Soin", + "code": "1", + "codeArborescence": "1" + } + } + ] + }, + "Retour par défaut": { + "value": [ + { + "libelle": "Soin", + "code": "7" + } + ] + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences", + "description": "PROD" + } + ] + } + }, + "/v1/competences/enjeu/{code}": { + "get": { + "tags": [ + "Enjeu de compétences" + ], + "summary": "Lire un enjeu de compétences", + "description": "Permet la lecture d'un enjeu de compétences depuis son code\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "lireEnjeu", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "code", + "codearborescence", + "datefin", + "domainecompetence(libelle,code,codearborescence)", + "libelle", + "objectifs(libelle,macrocompetences(libelle,transferable,souscategorie,code,riasecmineur,transitionnumerique,codeogr,maturite,riasecmajeur,competences(libelle,@competencedetaillee(riasecmineur,riasecmajeur),code,transitionecologique,transitionnumerique,codeogr,@macrocompetence(riasecmineur,riasecmajeur)),@macrosavoiretreprofessionnel(qualiteprofessionnelle),codearborescence,transitionecologique),code,codearborescence)", + "obsolete" + ], + "example": "libelle,obsolete,code,codearborescence,datefin,domainecompetence(codearborescence,libelle,code)" + } + }, + { + "name": "date", + "in": "query", + "description": "Date de la recherche au format yyyy-MM-dd ou yyyyMMdd.", + "required": false, + "schema": { + "type": "string", + "format": "date", + "example": "2022-05-28" + } + }, + { + "name": "code", + "in": "path", + "description": "Code enjeu.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer hITtO43KJEaw3-ODjpX7CzU3opQ" + } + } + ], + "responses": { + "200": { + "description": "Retourne les données pour un enjeu de compétences renseigné.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Enjeu" + }, + "examples": { + "Retour complet": { + "value": { + "objectifs": [ + { + "libelle": "Soigner des animaux", + "macroCompetences": [ + { + "type": "MACRO-COMPETENCE", + "libelle": "Anglais maritime", + "transferable": false, + "sousCategorie": "TECHNIQUE", + "code": "100253", + "riasecMineur": "R", + "transitionNumerique": false, + "codeOgr": "100253", + "maturite": "HETEROGENE", + "riasecMajeur": "R", + "competences": [ + { + "type": "string", + "libelle": "Anglais maritime", + "riasecMineur": "R", + "riasecMajeur": "R", + "code": "100253", + "transitionEcologique": false, + "transitionNumerique": false, + "codeOgr": "100253" + } + ], + "qualiteProfessionnelle": "01", + "codeArborescence": "string", + "transitionEcologique": false + } + ], + "code": "19", + "codeArborescence": "1E4" + } + ], + "libelle": "Soin", + "obsolete": false, + "code": "7", + "codeArborescence": "1E", + "dateFin": "2024-02-23T14:40:14.848Z", + "domaineCompetence": { + "libelle": "Management, Social, Soin", + "code": "1", + "codeArborescence": "1" + } + } + }, + "Retour par défaut": { + "value": { + "libelle": "Soin", + "obsolete": false, + "code": "7", + "codeArborescence": "1E", + "dateFin": "2024-02-23T14:40:14.848Z", + "domaineCompetence": { + "codeArborescence": "1", + "libelle": "Management, Social, Soin", + "code": "1" + } + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "service": "/v1/mon_uri", + "message": "Code inexistant: monCode", + "code": 404 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences", + "description": "PROD" + } + ] + } + }, + "/v1/competences/macro-competence": { + "get": { + "tags": [ + "Macro-compétence" + ], + "summary": "Lister les macro-compétences", + "description": "Permet de lister les macro-compétences.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "listerMacroCompetences", + "parameters": [ + { + "name": "code-ogr", + "in": "query", + "description": "Code OGR.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "riasec-majeur", + "in": "query", + "description": "Riasec majeur.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "riasec-mineur", + "in": "query", + "description": "Riasec mineur.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "@macrosavoiretreprofessionnel(qualiteprofessionnelle)", + "code", + "codearborescence", + "codeogr", + "competenceesco(libelle,uri)", + "datefin", + "definition", + "libelle", + "maturite", + "objectif(libelle,enjeu(libelle,code,codearborescence,domainecompetence(libelle,code,codearborescence)),code,codearborescence)", + "obsolete", + "riasecmajeur", + "riasecmineur", + "souscategorie", + "transferable", + "transitionecologique", + "transitionnumerique" + ], + "example": "libelle,code" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer hITtO43KJEaw3-ODjpX7CzU3opQ" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des macro-compétences.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/MacroSavoirEtreProfessionnel" + }, + { + "$ref": "#/components/schemas/MacroSavoirFaire" + } + ] + } + }, + "examples": { + "Retour complet": { + "value": [ + { + "type": "MACRO-COMPETENCE", + "libelle": "Anglais maritime", + "transferable": false, + "sousCategorie": "TECHNIQUE", + "obsolete": false, + "code": "100253", + "riasecMineur": "R", + "definition": "string", + "transitionNumerique": false, + "codeOgr": "100253", + "maturite": "HETEROGENE", + "riasecMajeur": "R", + "qualiteProfessionnelle": "01", + "competenceEsco": { + "libelle": "abattre des arbres", + "uri": "http://data.europa.eu/esco/skill/b8cfe3d0-15a7-4be4-a7f1-f5141ed11f16" + }, + "codeArborescence": "string", + "objectif": { + "libelle": "Soigner des animaux", + "enjeu": { + "libelle": "Soin", + "code": "7", + "codeArborescence": "1E", + "domaineCompetence": { + "libelle": "Management, Social, Soin", + "code": "1", + "codeArborescence": "1" + } + }, + "code": "19", + "codeArborescence": "1E4" + }, + "transitionEcologique": false, + "dateFin": "2024-02-23T14:40:14.848Z" + } + ] + }, + "Retour par défaut": { + "value": [ + { + "type": "MACRO-COMPETENCE", + "libelle": "Anglais maritime", + "code": "100253" + } + ] + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences", + "description": "PROD" + } + ] + } + }, + "/v1/competences/macro-competence/{code}": { + "get": { + "tags": [ + "Macro-compétence" + ], + "summary": "Lire une macro-compétence", + "description": "Permet la lecture d'une macro-compétence depuis son code.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "lireMacroCompetence", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "@macrosavoiretreprofessionnel(qualiteprofessionnelle)", + "code", + "codearborescence", + "codeogr", + "competenceesco(libelle,uri)", + "competences(libelle,@competencedetaillee(riasecmineur,riasecmajeur),code,transitionecologique,transitionnumerique,codeogr,@macrocompetence(riasecmineur,riasecmajeur))", + "datefin", + "definition", + "libelle", + "maturite", + "objectif(libelle,enjeu(libelle,code,codearborescence,domainecompetence(libelle,code,codearborescence)),code,codearborescence)", + "obsolete", + "riasecmajeur", + "riasecmineur", + "souscategorie", + "transferable", + "transitionecologique", + "transitionnumerique" + ], + "example": "libelle,transferable,souscategorie,obsolete,code,riasecmineur,definition,transitionnumerique,codeogr,maturite,riasecmajeur,@macrosavoiretreprofessionnel(qualiteprofessionnelle),competenceesco(libelle,uri),codearborescence,objectif(codearborescence,libelle,enjeu(codearborescence,libelle,code,domainecompetence(codearborescence,libelle,code)),code),transitionecologique,datefin" + } + }, + { + "name": "date", + "in": "query", + "description": "Date de la recherche au format yyyy-MM-dd ou yyyyMMdd.", + "required": false, + "schema": { + "type": "string", + "format": "date", + "example": "2022-05-28" + } + }, + { + "name": "code", + "in": "path", + "description": "Code macro-compétence.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer hITtO43KJEaw3-ODjpX7CzU3opQ" + } + } + ], + "responses": { + "200": { + "description": "Retourne les données pour une macro-compétence renseignée.", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/MacroSavoirEtreProfessionnel" + }, + { + "$ref": "#/components/schemas/MacroSavoirFaire" + } + ] + }, + "examples": { + "Retour complet": { + "value": { + "type": "MACRO-COMPETENCE", + "libelle": "Anglais maritime", + "transferable": false, + "sousCategorie": "TECHNIQUE", + "obsolete": false, + "code": "100253", + "riasecMineur": "R", + "definition": "string", + "transitionNumerique": false, + "codeOgr": "100253", + "maturite": "HETEROGENE", + "riasecMajeur": "R", + "competences": [ + { + "type": "string", + "libelle": "Anglais maritime", + "riasecMineur": "R", + "riasecMajeur": "R", + "code": "100253", + "transitionEcologique": false, + "transitionNumerique": false, + "codeOgr": "100253" + } + ], + "qualiteProfessionnelle": "01", + "competenceEsco": { + "libelle": "abattre des arbres", + "uri": "http://data.europa.eu/esco/skill/b8cfe3d0-15a7-4be4-a7f1-f5141ed11f16" + }, + "codeArborescence": "string", + "objectif": { + "libelle": "Soigner des animaux", + "enjeu": { + "libelle": "Soin", + "code": "7", + "codeArborescence": "1E", + "domaineCompetence": { + "libelle": "Management, Social, Soin", + "code": "1", + "codeArborescence": "1" + } + }, + "code": "19", + "codeArborescence": "1E4" + }, + "transitionEcologique": false, + "dateFin": "2024-02-23T14:40:14.848Z" + } + }, + "Retour par défaut": { + "value": { + "type": "MACRO-COMPETENCE", + "libelle": "Anglais maritime", + "transferable": false, + "sousCategorie": "TECHNIQUE", + "obsolete": false, + "code": "100253", + "riasecMineur": "R", + "definition": "string", + "transitionNumerique": false, + "codeOgr": "100253", + "maturite": "HETEROGENE", + "riasecMajeur": "R", + "qualiteProfessionnelle": "01", + "competenceEsco": { + "libelle": "abattre des arbres", + "uri": "http://data.europa.eu/esco/skill/b8cfe3d0-15a7-4be4-a7f1-f5141ed11f16" + }, + "codeArborescence": "string", + "objectif": { + "codeArborescence": "1E4", + "libelle": "Soigner des animaux", + "enjeu": { + "codeArborescence": "1E", + "libelle": "Soin", + "code": "7", + "domaineCompetence": { + "codeArborescence": "1", + "libelle": "Management, Social, Soin", + "code": "1" + } + }, + "code": "19" + }, + "transitionEcologique": false, + "dateFin": "2024-02-23T14:40:14.848Z" + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "service": "/v1/mon_uri", + "message": "Code inexistant: monCode", + "code": 404 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences", + "description": "PROD" + } + ] + } + }, + "/v1/competences/macro-savoir-faire": { + "get": { + "tags": [ + "Macro-savoir-faire" + ], + "summary": "Lister les macros savoir-faire", + "description": "Permet de lister les macros savoir-faire.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "listerMacroSavoirFaires", + "parameters": [ + { + "name": "code-ogr", + "in": "query", + "description": "Code OGR.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "code", + "codearborescence", + "codeogr", + "competenceesco(libelle,uri)", + "datefin", + "definition", + "libelle", + "maturite", + "objectif(libelle,enjeu(libelle,code,codearborescence,domainecompetence(libelle,code,codearborescence)),code,codearborescence)", + "obsolete", + "riasecmajeur", + "riasecmineur", + "souscategorie", + "transferable", + "transitionecologique", + "transitionnumerique" + ], + "example": "libelle,code" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer hITtO43KJEaw3-ODjpX7CzU3opQ" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des macros savoir-faire.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MacroSavoirFaire" + } + }, + "examples": { + "Retour complet": { + "value": [ + { + "type": "MACRO-SAVOIR-FAIRE", + "libelle": "Anglais maritime", + "transferable": false, + "sousCategorie": "TECHNIQUE", + "obsolete": false, + "code": "100253", + "riasecMineur": "R", + "definition": "string", + "transitionNumerique": false, + "codeOgr": "100253", + "maturite": "HETEROGENE", + "riasecMajeur": "R", + "competenceEsco": { + "libelle": "abattre des arbres", + "uri": "http://data.europa.eu/esco/skill/b8cfe3d0-15a7-4be4-a7f1-f5141ed11f16" + }, + "codeArborescence": "string", + "objectif": { + "libelle": "Soigner des animaux", + "enjeu": { + "libelle": "Soin", + "code": "7", + "codeArborescence": "1E", + "domaineCompetence": { + "libelle": "Management, Social, Soin", + "code": "1", + "codeArborescence": "1" + } + }, + "code": "19", + "codeArborescence": "1E4" + }, + "transitionEcologique": false, + "dateFin": "2024-02-23T14:40:14.848Z" + } + ] + }, + "Retour par défaut": { + "value": [ + { + "type": "MACRO-SAVOIR-FAIRE", + "libelle": "Anglais maritime", + "code": "100253" + } + ] + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences", + "description": "PROD" + } + ] + } + }, + "/v1/competences/macro-savoir-faire/{code}": { + "get": { + "tags": [ + "Macro-savoir-faire" + ], + "summary": "Lire une macro savoir-faire", + "description": "Permet la lecture d'un macro savoir-faire depuis son code.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "lireMacroSavoirFaire", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "code", + "codearborescence", + "codeogr", + "competenceesco(libelle,uri)", + "competences(libelle,@competencedetaillee(riasecmineur,riasecmajeur),code,transitionecologique,transitionnumerique,codeogr,@macrocompetence(riasecmineur,riasecmajeur))", + "datefin", + "definition", + "libelle", + "maturite", + "objectif(libelle,enjeu(libelle,code,codearborescence,domainecompetence(libelle,code,codearborescence)),code,codearborescence)", + "obsolete", + "riasecmajeur", + "riasecmineur", + "souscategorie", + "transferable", + "transitionecologique", + "transitionnumerique" + ], + "example": "libelle,transferable,souscategorie,obsolete,code,riasecmineur,definition,transitionnumerique,codeogr,maturite,riasecmajeur,competenceesco(libelle,uri),codearborescence,objectif(codearborescence,libelle,enjeu(codearborescence,libelle,code,domainecompetence(codearborescence,libelle,code)),code),transitionecologique,datefin" + } + }, + { + "name": "date", + "in": "query", + "description": "Date de la recherche au format yyyy-MM-dd ou yyyyMMdd.", + "required": false, + "schema": { + "type": "string", + "format": "date", + "example": "2022-05-28" + } + }, + { + "name": "code", + "in": "path", + "description": "Code macro savoir-faire.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer hITtO43KJEaw3-ODjpX7CzU3opQ" + } + } + ], + "responses": { + "200": { + "description": "Retourne les données pour un macro savoir-faire.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MacroSavoirFaire" + }, + "examples": { + "Retour complet": { + "value": { + "type": "MACRO-SAVOIR-FAIRE", + "libelle": "Anglais maritime", + "transferable": false, + "sousCategorie": "TECHNIQUE", + "obsolete": false, + "code": "100253", + "riasecMineur": "R", + "definition": "string", + "transitionNumerique": false, + "codeOgr": "100253", + "maturite": "HETEROGENE", + "riasecMajeur": "R", + "competences": [ + { + "type": "string", + "libelle": "Anglais maritime", + "riasecMineur": "R", + "riasecMajeur": "R", + "code": "100253", + "transitionEcologique": false, + "transitionNumerique": false, + "codeOgr": "100253" + } + ], + "competenceEsco": { + "libelle": "abattre des arbres", + "uri": "http://data.europa.eu/esco/skill/b8cfe3d0-15a7-4be4-a7f1-f5141ed11f16" + }, + "codeArborescence": "string", + "objectif": { + "libelle": "Soigner des animaux", + "enjeu": { + "libelle": "Soin", + "code": "7", + "codeArborescence": "1E", + "domaineCompetence": { + "libelle": "Management, Social, Soin", + "code": "1", + "codeArborescence": "1" + } + }, + "code": "19", + "codeArborescence": "1E4" + }, + "transitionEcologique": false, + "dateFin": "2024-02-23T14:40:14.848Z" + } + }, + "Retour par défaut": { + "value": { + "type": "MACRO-SAVOIR-FAIRE", + "libelle": "Anglais maritime", + "transferable": false, + "sousCategorie": "TECHNIQUE", + "obsolete": false, + "code": "100253", + "riasecMineur": "R", + "definition": "string", + "transitionNumerique": false, + "codeOgr": "100253", + "maturite": "HETEROGENE", + "riasecMajeur": "R", + "competenceEsco": { + "libelle": "abattre des arbres", + "uri": "http://data.europa.eu/esco/skill/b8cfe3d0-15a7-4be4-a7f1-f5141ed11f16" + }, + "codeArborescence": "string", + "objectif": { + "codeArborescence": "1E4", + "libelle": "Soigner des animaux", + "enjeu": { + "codeArborescence": "1E", + "libelle": "Soin", + "code": "7", + "domaineCompetence": { + "codeArborescence": "1", + "libelle": "Management, Social, Soin", + "code": "1" + } + }, + "code": "19" + }, + "transitionEcologique": false, + "dateFin": "2024-02-23T14:40:14.848Z" + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "service": "/v1/mon_uri", + "message": "Code inexistant: monCode", + "code": 404 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences", + "description": "PROD" + } + ] + } + }, + "/v1/competences/macro-savoir-etre-professionnel": { + "get": { + "tags": [ + "Macro-savoir-être professionnel" + ], + "summary": "Lister les macros savoir-être professionnel", + "description": "Permet de lister les macros savoir-être professionnels.\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "listerMacroSavoirEtreProfessionnels", + "parameters": [ + { + "name": "code-ogr", + "in": "query", + "description": "Code OGR.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "qualite-professionnelle", + "in": "query", + "description": "code qualité professionnelle.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "code", + "codearborescence", + "codeogr", + "competenceesco(libelle,uri)", + "datefin", + "definition", + "libelle", + "maturite", + "objectif(libelle,enjeu(libelle,code,codearborescence,domainecompetence(libelle,code,codearborescence)),code,codearborescence)", + "obsolete", + "qualiteprofessionnelle", + "riasecmajeur", + "riasecmineur", + "souscategorie", + "transferable", + "transitionecologique", + "transitionnumerique" + ], + "example": "libelle,code" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer hITtO43KJEaw3-ODjpX7CzU3opQ" + } + } + ], + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MacroSavoirEtreProfessionnel" + }, + "examples": { + "Retour complet": { + "value": { + "type": "MACRO-SAVOIR-ETRE-PROFESSIONNEL", + "libelle": "Anglais maritime", + "transferable": false, + "sousCategorie": "TECHNIQUE", + "obsolete": false, + "code": "100253", + "riasecMineur": "R", + "definition": "string", + "transitionNumerique": false, + "codeOgr": "100253", + "maturite": "HETEROGENE", + "riasecMajeur": "R", + "qualiteProfessionnelle": "01", + "competenceEsco": { + "libelle": "abattre des arbres", + "uri": "http://data.europa.eu/esco/skill/b8cfe3d0-15a7-4be4-a7f1-f5141ed11f16" + }, + "codeArborescence": "string", + "objectif": { + "libelle": "Soigner des animaux", + "enjeu": { + "libelle": "Soin", + "code": "7", + "codeArborescence": "1E", + "domaineCompetence": { + "libelle": "Management, Social, Soin", + "code": "1", + "codeArborescence": "1" + } + }, + "code": "19", + "codeArborescence": "1E4" + }, + "transitionEcologique": false, + "dateFin": "2024-02-23T14:40:14.848Z" + } + }, + "Retour par défaut": { + "value": { + "type": "MACRO-SAVOIR-ETRE-PROFESSIONNEL", + "libelle": "Anglais maritime", + "code": "100253" + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + }, + "text/csv": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences", + "description": "PROD" + } + ] + } + }, + "/v1/competences/macro-savoir-etre-professionnel/{code}": { + "get": { + "tags": [ + "Macro-savoir-être professionnel" + ], + "summary": "Lire une macro savoir-être professionnel", + "description": "Permet la lecture d'un macro savoir-être professionnel depuis son code.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "lireMacroSavoirEtreProfessionnel", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "code", + "codearborescence", + "codeogr", + "competenceesco(libelle,uri)", + "competences(libelle,@competencedetaillee(riasecmineur,riasecmajeur),code,transitionecologique,transitionnumerique,codeogr,@macrocompetence(riasecmineur,riasecmajeur))", + "datefin", + "definition", + "libelle", + "maturite", + "objectif(libelle,enjeu(libelle,code,codearborescence,domainecompetence(libelle,code,codearborescence)),code,codearborescence)", + "obsolete", + "qualiteprofessionnelle", + "riasecmajeur", + "riasecmineur", + "souscategorie", + "transferable", + "transitionecologique", + "transitionnumerique" + ], + "example": "libelle,transferable,souscategorie,obsolete,code,riasecmineur,definition,transitionnumerique,codeogr,maturite,riasecmajeur,qualiteprofessionnelle,competenceesco(libelle,uri),codearborescence,objectif(codearborescence,libelle,enjeu(codearborescence,libelle,code,domainecompetence(codearborescence,libelle,code)),code),transitionecologique,datefin" + } + }, + { + "name": "date", + "in": "query", + "description": "Date de la recherche au format yyyy-MM-dd ou yyyyMMdd.", + "required": false, + "schema": { + "type": "string", + "format": "date", + "example": "2022-05-28" + } + }, + { + "name": "code", + "in": "path", + "description": "Code macro savoir-être professionnel.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer hITtO43KJEaw3-ODjpX7CzU3opQ" + } + } + ], + "responses": { + "200": { + "description": "Retourne les données pour un macro savoir-être professionel renseigné.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MacroSavoirEtreProfessionnel" + }, + "examples": { + "Retour complet": { + "value": { + "type": "MACRO-SAVOIR-ETRE-PROFESSIONNEL", + "libelle": "Anglais maritime", + "transferable": false, + "sousCategorie": "TECHNIQUE", + "obsolete": false, + "code": "100253", + "riasecMineur": "R", + "definition": "string", + "transitionNumerique": false, + "codeOgr": "100253", + "maturite": "HETEROGENE", + "riasecMajeur": "R", + "qualiteProfessionnelle": "01", + "competences": [ + { + "type": "string", + "libelle": "Anglais maritime", + "riasecMineur": "R", + "riasecMajeur": "R", + "code": "100253", + "transitionEcologique": false, + "transitionNumerique": false, + "codeOgr": "100253" + } + ], + "competenceEsco": { + "libelle": "abattre des arbres", + "uri": "http://data.europa.eu/esco/skill/b8cfe3d0-15a7-4be4-a7f1-f5141ed11f16" + }, + "codeArborescence": "string", + "objectif": { + "libelle": "Soigner des animaux", + "enjeu": { + "libelle": "Soin", + "code": "7", + "codeArborescence": "1E", + "domaineCompetence": { + "libelle": "Management, Social, Soin", + "code": "1", + "codeArborescence": "1" + } + }, + "code": "19", + "codeArborescence": "1E4" + }, + "transitionEcologique": false, + "dateFin": "2024-02-23T14:40:14.848Z" + } + }, + "Retour par défaut": { + "value": { + "type": "MACRO-SAVOIR-ETRE-PROFESSIONNEL", + "libelle": "Anglais maritime", + "transferable": false, + "sousCategorie": "TECHNIQUE", + "obsolete": false, + "code": "100253", + "riasecMineur": "R", + "definition": "string", + "transitionNumerique": false, + "codeOgr": "100253", + "maturite": "HETEROGENE", + "riasecMajeur": "R", + "qualiteProfessionnelle": "01", + "competenceEsco": { + "libelle": "abattre des arbres", + "uri": "http://data.europa.eu/esco/skill/b8cfe3d0-15a7-4be4-a7f1-f5141ed11f16" + }, + "codeArborescence": "string", + "objectif": { + "codeArborescence": "1E4", + "libelle": "Soigner des animaux", + "enjeu": { + "codeArborescence": "1E", + "libelle": "Soin", + "code": "7", + "domaineCompetence": { + "codeArborescence": "1", + "libelle": "Management, Social, Soin", + "code": "1" + } + }, + "code": "19" + }, + "transitionEcologique": false, + "dateFin": "2024-02-23T14:40:14.848Z" + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "service": "/v1/mon_uri", + "message": "Code inexistant: monCode", + "code": 404 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences", + "description": "PROD" + } + ] + } + }, + "/v1/competences/objectif": { + "get": { + "tags": [ + "Objectif" + ], + "summary": "Lister les objectifs", + "description": "Permet de lister les objectifs de compétences.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "listerObjectifs", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "code", + "codearborescence", + "datefin", + "enjeu(libelle,code,codearborescence,domainecompetence(libelle,code,codearborescence))", + "libelle", + "macrocompetences(libelle,transferable,@macrosavoiretreprofessionnel(qualiteprofessionnelle),souscategorie,code,riasecmineur,codearborescence,transitionecologique,transitionnumerique,codeogr,maturite,riasecmajeur)", + "obsolete" + ], + "example": "libelle,code" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer hITtO43KJEaw3-ODjpX7CzU3opQ" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des objectifs.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Objectif" + } + }, + "examples": { + "Retour complet": { + "value": [ + { + "libelle": "Soigner des animaux", + "enjeu": { + "libelle": "Soin", + "code": "7", + "codeArborescence": "1E", + "domaineCompetence": { + "libelle": "Management, Social, Soin", + "code": "1", + "codeArborescence": "1" + } + }, + "macroCompetences": [ + { + "type": "MACRO-COMPETENCE", + "libelle": "Anglais maritime", + "transferable": false, + "qualiteProfessionnelle": "01", + "sousCategorie": "TECHNIQUE", + "code": "100253", + "riasecMineur": "R", + "codeArborescence": "string", + "transitionEcologique": false, + "transitionNumerique": false, + "codeOgr": "100253", + "maturite": "HETEROGENE", + "riasecMajeur": "R" + } + ], + "obsolete": false, + "code": "19", + "codeArborescence": "1E4", + "dateFin": "2024-02-23T14:40:14.848Z" + } + ] + }, + "Retour par défaut": { + "value": [ + { + "libelle": "Soigner des animaux", + "code": "19" + } + ] + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences", + "description": "PROD" + } + ] + } + }, + "/v1/competences/objectif/{code}": { + "get": { + "tags": [ + "Objectif" + ], + "summary": "Lire un objectif", + "description": "Permet la lecture d'un objectif depuis son code.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "lireObjectif", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "code", + "codearborescence", + "datefin", + "enjeu(libelle,code,codearborescence,domainecompetence(libelle,code,codearborescence))", + "libelle", + "macrocompetences(libelle,transferable,souscategorie,code,riasecmineur,transitionnumerique,codeogr,maturite,riasecmajeur,competences(libelle,@competencedetaillee(riasecmineur,riasecmajeur),code,transitionecologique,transitionnumerique,codeogr,@macrocompetence(riasecmineur,riasecmajeur)),@macrosavoiretreprofessionnel(qualiteprofessionnelle),codearborescence,transitionecologique)", + "obsolete" + ], + "example": "libelle,enjeu(codearborescence,libelle,code,domainecompetence(codearborescence,libelle,code)),obsolete,code,codearborescence,datefin" + } + }, + { + "name": "date", + "in": "query", + "description": "Date de la recherche au format yyyy-MM-dd ou yyyyMMdd.", + "required": false, + "schema": { + "type": "string", + "format": "date", + "example": "2022-05-28" + } + }, + { + "name": "code", + "in": "path", + "description": "Code objectif.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer hITtO43KJEaw3-ODjpX7CzU3opQ" + } + } + ], + "responses": { + "200": { + "description": "Retourne les données pour un objectif renseigné.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Objectif" + }, + "examples": { + "Retour complet": { + "value": { + "libelle": "Soigner des animaux", + "enjeu": { + "libelle": "Soin", + "code": "7", + "codeArborescence": "1E", + "domaineCompetence": { + "libelle": "Management, Social, Soin", + "code": "1", + "codeArborescence": "1" + } + }, + "macroCompetences": [ + { + "type": "MACRO-COMPETENCE", + "libelle": "Anglais maritime", + "transferable": false, + "sousCategorie": "TECHNIQUE", + "code": "100253", + "riasecMineur": "R", + "transitionNumerique": false, + "codeOgr": "100253", + "maturite": "HETEROGENE", + "riasecMajeur": "R", + "competences": [ + { + "type": "string", + "libelle": "Anglais maritime", + "riasecMineur": "R", + "riasecMajeur": "R", + "code": "100253", + "transitionEcologique": false, + "transitionNumerique": false, + "codeOgr": "100253" + } + ], + "qualiteProfessionnelle": "01", + "codeArborescence": "string", + "transitionEcologique": false + } + ], + "obsolete": false, + "code": "19", + "codeArborescence": "1E4", + "dateFin": "2024-02-23T14:40:14.848Z" + } + }, + "Retour par défaut": { + "value": { + "libelle": "Soigner des animaux", + "enjeu": { + "codeArborescence": "1E", + "libelle": "Soin", + "code": "7", + "domaineCompetence": { + "codeArborescence": "1", + "libelle": "Management, Social, Soin", + "code": "1" + } + }, + "obsolete": false, + "code": "19", + "codeArborescence": "1E4", + "dateFin": "2024-02-23T14:40:14.848Z" + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "service": "/v1/mon_uri", + "message": "Code inexistant: monCode", + "code": 404 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences", + "description": "PROD" + } + ] + } + }, + "/v1/competences/savoir": { + "get": { + "tags": [ + "Savoir" + ], + "summary": "Lister les savoirs", + "description": "Permet de lister les savoirs.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "listerSavoirs", + "parameters": [ + { + "name": "code-ogr", + "in": "query", + "description": "Code OGR.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "categoriesavoir(libelle,categorie(libelle,code),code)", + "code", + "codeogr", + "competenceesco(libelle,uri)", + "datefin", + "libelle", + "obsolete", + "transitionecologique", + "transitionnumerique" + ], + "example": "libelle,code" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer hITtO43KJEaw3-ODjpX7CzU3opQ" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des savoirs.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Savoir" + } + }, + "examples": { + "Retour complet": { + "value": [ + { + "type": "SAVOIR", + "libelle": "Anglais maritime", + "obsolete": false, + "code": "100253", + "competenceEsco": { + "libelle": "abattre des arbres", + "uri": "http://data.europa.eu/esco/skill/b8cfe3d0-15a7-4be4-a7f1-f5141ed11f16" + }, + "transitionEcologique": false, + "transitionNumerique": false, + "codeOgr": "100253", + "categorieSavoir": { + "libelle": "Véhicules", + "categorie": { + "libelle": "Véhicules", + "code": "30" + }, + "code": "30" + }, + "dateFin": "2024-02-23T14:40:14.848Z" + } + ] + }, + "Retour par défaut": { + "value": [ + { + "type": "SAVOIR", + "libelle": "Anglais maritime", + "code": "100253" + } + ] + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences", + "description": "PROD" + } + ] + } + }, + "/v1/competences/savoir/{code}": { + "get": { + "tags": [ + "Savoir" + ], + "summary": "Lire un savoir", + "description": "Permet de lire un savoir depuis son code.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "lireSavoir", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "categoriesavoir(libelle,categorie(libelle,code),code)", + "code", + "codeogr", + "competenceesco(libelle,uri)", + "datefin", + "libelle", + "obsolete", + "transitionecologique", + "transitionnumerique" + ], + "example": "libelle,obsolete,code,competenceesco(libelle,uri),transitionecologique,transitionnumerique,codeogr,categoriesavoir(libelle,categorie(libelle,code),code),datefin" + } + }, + { + "name": "date", + "in": "query", + "description": "Date de la recherche au format yyyy-MM-dd ou yyyyMMdd.", + "required": false, + "schema": { + "type": "string", + "format": "date", + "example": "2022-05-28" + } + }, + { + "name": "code", + "in": "path", + "description": "Code savoir.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer hITtO43KJEaw3-ODjpX7CzU3opQ" + } + } + ], + "responses": { + "200": { + "description": "Retourne les données pour un savoir renseigné.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Savoir" + }, + "examples": { + "Retour complet": { + "value": { + "type": "SAVOIR", + "libelle": "Anglais maritime", + "obsolete": false, + "code": "100253", + "competenceEsco": { + "libelle": "abattre des arbres", + "uri": "http://data.europa.eu/esco/skill/b8cfe3d0-15a7-4be4-a7f1-f5141ed11f16" + }, + "transitionEcologique": false, + "transitionNumerique": false, + "codeOgr": "100253", + "categorieSavoir": { + "libelle": "Véhicules", + "categorie": { + "libelle": "Véhicules", + "code": "30" + }, + "code": "30" + }, + "dateFin": "2024-02-23T14:40:14.848Z" + } + }, + "Retour par défaut": { + "value": { + "type": "SAVOIR", + "libelle": "Anglais maritime", + "obsolete": false, + "code": "100253", + "competenceEsco": { + "libelle": "abattre des arbres", + "uri": "http://data.europa.eu/esco/skill/b8cfe3d0-15a7-4be4-a7f1-f5141ed11f16" + }, + "transitionEcologique": false, + "transitionNumerique": false, + "codeOgr": "100253", + "categorieSavoir": { + "libelle": "Véhicules", + "categorie": { + "libelle": "Véhicules", + "code": "30" + }, + "code": "30" + }, + "dateFin": "2024-02-23T14:40:14.848Z" + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "service": "/v1/mon_uri", + "message": "Code inexistant: monCode", + "code": 404 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences", + "description": "PROD" + } + ] + } + }, + "/v1/competences/version": { + "get": { + "tags": [ + "Versionning du ROME" + ], + "summary": "Récupérer la version actuelle du ROME", + "description": "Récupère la version actuelle du ROME.", + "operationId": "lireVersion", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "version", + "lastModifiedDate", + "version,lastModifiedDate" + ], + "example": "version,lastModifiedDate" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer hITtO43KJEaw3-ODjpX7CzU3opQ" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VersionRome" + }, + "examples": { + "Retour complet": { + "value": { + "version": "19", + "lastModifiedDate": "2025-05-22T12:04:43.281Z" + } + }, + "Retour par défaut": { + "value": { + "version": "19", + "lastModifiedDate": "2025-05-22T12:04:43.281Z" + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-competences", + "description": "PROD" + } + ] + } + } + }, + "components": { + "schemas": { + "CategorieSavoir": { + "type": "object", + "description": "Catégorie de Savoirs. Il y a seulement deux niveaux de catégories de savoirs: l'un qui dispose de sous-catégories et l'autre qui dispose d'une catégorie de savoir parente et de savoirs.", + "properties": { + "categorie": { + "$ref": "#/components/schemas/CategorieSavoir" + }, + "code": { + "type": "string", + "description": "Code unique de la catégorie de savoirs.", + "example": "30" + }, + "dateFin": { + "type": "string", + "description": "date de fin de validité (renseignée si l'entité est obsolete)", + "format": "date-time" + }, + "libelle": { + "type": "string", + "description": "Libellé de la catégorie de savoirs.", + "example": "Véhicules" + }, + "obsolete": { + "type": "boolean", + "description": "boolean définissant si l'entité est obsolete" + }, + "savoirs": { + "type": "array", + "description": "Savoirs.", + "items": { + "$ref": "#/components/schemas/Savoir" + } + }, + "sousCategories": { + "type": "array", + "description": "Sous-catégories rattachées.", + "items": { + "$ref": "#/components/schemas/CategorieSavoir" + } + } + } + }, + "Savoir": { + "type": "object", + "description": "Savoir.", + "allOf": [ + { + "$ref": "#/components/schemas/Competence" + }, + { + "type": "object", + "properties": { + "categorieSavoir": { + "$ref": "#/components/schemas/CategorieSavoir" + }, + "type": { + "type": "string", + "description": "Cette propriété est forcément à la valeur 'SAVOIR'." + } + } + } + ] + }, + "Competence": { + "type": "object", + "description": "Compétence. Une compétence est forcément soit un macro-savoir-faire soit un macro-savoir-être professionnel, soit une compétence détaillée soit un savoir.", + "properties": { + "code": { + "type": "string", + "description": "Code unique de la compétence.", + "example": "100253" + }, + "codeOgr": { + "type": "string", + "description": "Code OGR. Ce champ est conservé uniquement pour des raisons de rétro-compatibilité.", + "example": "100253", + "x-deprecated": true + }, + "competenceEsco": { + "$ref": "#/components/schemas/CompetenceEsco" + }, + "dateFin": { + "type": "string", + "description": "date de fin de validité (renseignée si l'entité est obsolete)", + "format": "date-time" + }, + "libelle": { + "type": "string", + "description": "Libellé de la compétence.", + "example": "Anglais maritime" + }, + "obsolete": { + "type": "boolean", + "description": "boolean définissant si l'entité est obsolete" + }, + "transitionEcologique": { + "type": "boolean", + "description": "Transition écologique: oui/non. Ce champ est optionnel." + }, + "transitionNumerique": { + "type": "boolean", + "description": "Transition numérique: oui/non. Ce champ est optionnel." + }, + "type": { + "type": "string", + "description": "Le type de l'objet. Il y a quatre valeurs possibles :\n\n" + } + }, + "discriminator": { + "propertyName": "type" + } + }, + "CompetenceEsco": { + "type": "object", + "description": "Compétence ESCO (en provenance du référentiel 'ESCO')", + "properties": { + "libelle": { + "type": "string", + "description": "Libellé de la compétence ESCO.", + "example": "abattre des arbres" + }, + "uri": { + "type": "string", + "description": "Uri unique de la compétence ESCO.", + "example": "http://data.europa.eu/esco/skill/b8cfe3d0-15a7-4be4-a7f1-f5141ed11f16" + } + } + }, + "CompetenceDetaillee": { + "type": "object", + "description": "Compétence détaillée.", + "allOf": [ + { + "$ref": "#/components/schemas/Competence" + }, + { + "type": "object", + "properties": { + "macroCompetence": { + "$ref": "#/components/schemas/MacroCompetence" + }, + "riasecMajeur": { + "type": "string", + "enum": [ + "R", + "I", + "A", + "S", + "E", + "C" + ], + "description": "Riasec Majeur. Ce champ est optionnel." + }, + "riasecMineur": { + "type": "string", + "enum": [ + "R", + "I", + "A", + "S", + "E", + "C" + ], + "description": "Riasec Mineur. Ce champ est optionnel." + }, + "type": { + "type": "string", + "description": "Cette propriété est forcément à la valeur 'COMPETENCE-DETAILLEE'." + } + } + } + ] + }, + "MacroCompetence": { + "type": "object", + "description": "Macro-Compétence. Une macro-compétence est forcément soit un macro-savoir-faire soit un macro-savoir-être professionnel.", + "allOf": [ + { + "$ref": "#/components/schemas/Competence" + }, + { + "type": "object", + "properties": { + "codeArborescence": { + "type": "string", + "description": "Code Arborescence. Il s'agit d'un code unique sur cinq caractères qui est préfixé par le code arborescence de l'objectif lié." + }, + "competences": { + "type": "array", + "description": "Liste des compétences détaillées rattachées.", + "items": { + "$ref": "#/components/schemas/CompetenceDetaillee" + } + }, + "definition": { + "type": "string", + "description": "Définition. Ce champ est optionnel." + }, + "maturite": { + "type": "string", + "enum": [ + "HETEROGENE", + "TRES_HOMOGENE", + "HOMOGENE" + ], + "description": "Maturité de macro-compétence. Ce champ est optionnel." + }, + "objectif": { + "$ref": "#/components/schemas/Objectif" + }, + "riasecMajeur": { + "type": "string", + "enum": [ + "R", + "I", + "A", + "S", + "E", + "C" + ], + "description": "Riasec Majeur. Ce champ est optionnel." + }, + "riasecMineur": { + "type": "string", + "enum": [ + "R", + "I", + "A", + "S", + "E", + "C" + ], + "description": "Riasec Mineur. Ce champ est optionnel." + }, + "sousCategorie": { + "type": "string", + "enum": [ + "TECHNIQUE", + "TECHNIQUE_EXPERT", + "TRANSVERSE" + ], + "description": "Sous-catégorie de macro-compétence. Ce champ est optionnel." + }, + "transferable": { + "type": "boolean", + "description": "Transférable: oui/non. Ce champ est optionnel." + }, + "type": { + "type": "string", + "description": "Cette propriété est soit à la valeur 'MACRO-SAVOIR-ETRE-PROFESSIONNEL' soit à la valeur 'MACRO-SAVOIR-FAIRE'." + } + } + } + ], + "discriminator": { + "propertyName": "type" + } + }, + "Objectif": { + "type": "object", + "description": "Objectif", + "properties": { + "code": { + "type": "string", + "description": "Code unique de l'objectif.", + "example": "19" + }, + "codeArborescence": { + "type": "string", + "description": "Code Arborescence. Il s'agit d'un code unique sur trois caractères qui est préfixé par le code arborescence de l'enjeu lié.", + "example": "10000.0" + }, + "dateFin": { + "type": "string", + "description": "date de fin de validité (renseignée si l'entité est obsolete)", + "format": "date-time" + }, + "enjeu": { + "$ref": "#/components/schemas/Enjeu" + }, + "libelle": { + "type": "string", + "description": "Libellé de l'objectif.", + "example": "Soigner des animaux" + }, + "macroCompetences": { + "type": "array", + "description": "Liste des macros-compétences rattachées.", + "items": { + "$ref": "#/components/schemas/MacroCompetence" + } + }, + "obsolete": { + "type": "boolean", + "description": "boolean définissant si l'entité est obsolete" + } + } + }, + "Enjeu": { + "type": "object", + "description": "Enjeu", + "properties": { + "code": { + "type": "string", + "description": "Code unique de l'enjeu.", + "example": "7" + }, + "codeArborescence": { + "type": "string", + "description": "Code Arborescence. Il s'agit d'un code unique sur deux caractères dont le premier caractère de ce code correspond au code arborescence du domaine de compétence parent.", + "example": "1E" + }, + "dateFin": { + "type": "string", + "description": "date de fin de validité (renseignée si l'entité est obsolete)", + "format": "date-time" + }, + "domaineCompetence": { + "$ref": "#/components/schemas/DomaineCompetence" + }, + "libelle": { + "type": "string", + "description": "Libellé de l'enjeu.", + "example": "Soin" + }, + "objectifs": { + "type": "array", + "description": "Liste des objectifs rattachés.", + "items": { + "$ref": "#/components/schemas/Objectif" + } + }, + "obsolete": { + "type": "boolean", + "description": "boolean définissant si l'entité est obsolete" + } + } + }, + "DomaineCompetence": { + "type": "object", + "description": "Domaine de compétence", + "properties": { + "code": { + "type": "string", + "description": "Code unique du domaine de compétence.", + "example": "1" + }, + "codeArborescence": { + "type": "string", + "description": "Code Arborescence. Il s'agit d'un code unique sur un caractère qui est préfixe le code arborescence des enjeux liés au domaine.", + "example": "1" + }, + "dateFin": { + "type": "string", + "description": "date de fin de validité (renseignée si l'entité est obsolete)", + "format": "date-time" + }, + "enjeux": { + "type": "array", + "description": "Liste des enjeux rattachés.", + "items": { + "$ref": "#/components/schemas/Enjeu" + } + }, + "libelle": { + "type": "string", + "description": "Libellé du domaine de compétence.", + "example": "Management, Social, Soin" + }, + "obsolete": { + "type": "boolean", + "description": "boolean définissant si l'entité est obsolete" + } + } + }, + "MacroSavoirEtreProfessionnel": { + "type": "object", + "description": "Macro savoir-être professionnel.", + "allOf": [ + { + "$ref": "#/components/schemas/MacroCompetence" + }, + { + "type": "object", + "properties": { + "qualiteProfessionnelle": { + "type": "string", + "description": "Code sur deux caractères de la qualité professionnelle.\n\nUne qualité professionnelle décrit les capacités d’agir et d’interagir dans un contexte professionnel et sont contenues dans le référentiel 'Qualités professionnelles'.\n\nCe champ est optionnel.\n", + "example": "01" + }, + "type": { + "type": "string", + "description": "Cette propriété est forcément à la valeur 'MACRO-SAVOIR-ETRE-PROFESSIONNEL'." + } + } + } + ] + }, + "MacroSavoirFaire": { + "type": "object", + "description": "Macro Savoir-Faire.", + "allOf": [ + { + "$ref": "#/components/schemas/MacroCompetence" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Cette propriété est forcément à la valeur 'MACRO-SAVOIR-FAIRE'." + } + } + } + ] + }, + "VersionRome": { + "title": "VersionRome", + "type": "object", + "properties": { + "version": { + "type": "string", + "description": "La version actuelle." + }, + "lastModifiedDate": { + "type": "string", + "description": "La date de dernière modification de la version.", + "format": "date-time" + } + }, + "description": "Version du rome" + } + } + } +} \ No newline at end of file diff --git a/backend/api/rome_4_fiches_rome.json b/backend/api/rome_4_fiches_rome.json new file mode 100644 index 0000000..0ca1e36 --- /dev/null +++ b/backend/api/rome_4_fiches_rome.json @@ -0,0 +1,674 @@ +{ + "openapi": "3.0.1", + "info": { + "version": "1", + "title": "ROME V4.0 - Fiches ROME", + "description": "L'API « ROME 4.0 - Fiches métiers » permet de structurer les données au format de la fiche ROME.
Cette API vous permet d'identifier, pour chaque fiche :
\r\n\r\n**Scopes** : `api_rome-fiches-metiersv1`,`nomenclatureRome`\r\n\r\n**Royaume** : `/partenaire`" + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-fiches-metiers" + } + ], + "paths": { + "/v1/fiches-rome/fiche-metier": { + "get": { + "tags": [ + "Fiche métier" + ], + "summary": "Lister les fiches métier", + "description": "Permet de lister les fiches métier.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "listerFichesMetier", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "code", + "groupescompetencesmobilisees(competences(libelle,code),enjeu(libelle,code))", + "groupessavoirs(savoirs(libelle,code),categoriesavoirs(libelle,code))", + "metier(libelle,code)" + ], + "example": "code,metier(libelle,code)" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer lPjmA7mM6zOTJFjbJndC1sf3WJg" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des fiches métier.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FicheMetier" + } + }, + "examples": { + "Retour complet": { + "value": [ + { + "code": "A1201", + "groupesCompetencesMobilisees": [ + { + "competences": [ + { + "type": "string", + "libelle": "Techniques de soudage", + "code": "100007" + } + ], + "enjeu": { + "libelle": "Animation", + "code": "3" + } + } + ], + "groupesSavoirs": [ + { + "savoirs": [ + { + "type": "SAVOIR", + "libelle": "Techniques de soudage", + "code": "100007" + } + ], + "categorieSavoirs": { + "libelle": "Véhicules", + "code": "30" + } + } + ], + "metier": { + "libelle": "Bûcheronnage et élagage", + "code": "A1201" + } + } + ] + }, + "Retour par défaut": { + "value": [ + { + "code": "A1201", + "metier": { + "libelle": "Bûcheronnage et élagage", + "code": "A1201" + } + } + ] + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect.", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-fiches-metiers", + "description": "PROD" + } + ] + } + }, + "/v1/fiches-rome/fiche-metier/{code}": { + "get": { + "tags": [ + "Fiche métier" + ], + "summary": "Lire une fiche métier", + "description": "Permet de lire une fiche métier depuis son code.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "lireFicheMetier", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "code", + "datefin", + "groupescompetencesmobilisees(competences(libelle,code),enjeu(libelle,code))", + "groupessavoirs(savoirs(libelle,code),categoriesavoirs(libelle,code))", + "metier(libelle,code)", + "obsolete" + ], + "example": "obsolete,code,groupescompetencesmobilisees(competences(libelle,code),enjeu(libelle,code)),groupessavoirs(savoirs(libelle,code),categoriesavoirs(libelle,code)),datefin,metier(libelle,code)" + } + }, + { + "name": "date", + "in": "query", + "description": "Date de la recherche au format yyyy-MM-dd ou yyyyMMdd.", + "required": false, + "schema": { + "type": "string", + "format": "date", + "example": "2022-05-28" + } + }, + { + "name": "code", + "in": "path", + "description": "Code de la fiche métier.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer lPjmA7mM6zOTJFjbJndC1sf3WJg" + } + } + ], + "responses": { + "200": { + "description": "Retourne les données pour une fiche métier.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FicheMetier" + }, + "examples": { + "Retour complet": { + "value": { + "obsolete": false, + "code": "A1201", + "groupesCompetencesMobilisees": [ + { + "competences": [ + { + "type": "string", + "libelle": "Techniques de soudage", + "code": "100007" + } + ], + "enjeu": { + "libelle": "Animation", + "code": "3" + } + } + ], + "groupesSavoirs": [ + { + "savoirs": [ + { + "type": "SAVOIR", + "libelle": "Techniques de soudage", + "code": "100007" + } + ], + "categorieSavoirs": { + "libelle": "Véhicules", + "code": "30" + } + } + ], + "dateFin": "2024-02-23T14:40:14.848Z", + "metier": { + "libelle": "Bûcheronnage et élagage", + "code": "A1201" + } + } + }, + "Retour par défaut": { + "value": { + "obsolete": false, + "code": "A1201", + "groupesCompetencesMobilisees": [ + { + "competences": [ + { + "type": "string", + "libelle": "Techniques de soudage", + "code": "100007" + } + ], + "enjeu": { + "libelle": "Animation", + "code": "3" + } + } + ], + "groupesSavoirs": [ + { + "savoirs": [ + { + "type": "SAVOIR", + "libelle": "Techniques de soudage", + "code": "100007" + } + ], + "categorieSavoirs": { + "libelle": "Véhicules", + "code": "30" + } + } + ], + "dateFin": "2024-02-23T14:40:14.848Z", + "metier": { + "libelle": "Bûcheronnage et élagage", + "code": "A1201" + } + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect.", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + }, + "404": { + "description": "Not found.", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "service": "/v1/mon_uri", + "message": "Code inexistant: monCode", + "code": 404 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-fiches-metiers", + "description": "PROD" + } + ] + } + }, + "/v1/fiches-rome/version": { + "get": { + "tags": [ + "Versionning du ROME" + ], + "summary": "Récupérer la version actuelle du ROME", + "description": "Récupère la version actuelle du ROME.", + "operationId": "lireVersion", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "version", + "lastModifiedDate", + "version,lastModifiedDate" + ], + "example": "version,lastModifiedDate" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer lPjmA7mM6zOTJFjbJndC1sf3WJg" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VersionRome" + }, + "examples": { + "Retour complet": { + "value": { + "version": "19", + "lastModifiedDate": "2025-05-22T12:04:43.281Z" + } + }, + "Retour par défaut": { + "value": { + "version": "19", + "lastModifiedDate": "2025-05-22T12:04:43.281Z" + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.pole-emploi.io/partenaire/rome-fiches-metiers", + "description": "PROD" + } + ] + } + } + }, + "components": { + "schemas": { + "FicheMetier": { + "type": "object", + "description": "Fiche Métier", + "properties": { + "code": { + "type": "string", + "description": "Code unique de la fiche métier", + "example": "A1201" + }, + "dateFin": { + "type": "string", + "description": "date de fin de validité (renseignée si l'entité est obsolete)", + "format": "date-time" + }, + "groupesCompetencesMobilisees": { + "type": "array", + "description": "Groupes de compétences mobilisées", + "items": { + "$ref": "#/components/schemas/GroupeCompetences" + } + }, + "groupesSavoirs": { + "type": "array", + "description": "Groupes de savoirs", + "items": { + "$ref": "#/components/schemas/GroupeSavoirs" + } + }, + "metier": { + "$ref": "#/components/schemas/Metier" + }, + "obsolete": { + "type": "boolean", + "description": "boolean définissant si l'entité est obsolete" + } + } + }, + "GroupeCompetences": { + "type": "object", + "description": "Groupe de compétences", + "properties": { + "competences": { + "type": "array", + "description": "Compétences rattachées. Il peut s'agir, de façon pêle-mêle, de macro-savoir-faire, de macro-savoir-êtres professionnels ou bien de compétence détaillée. Il ne peut pas y avoir de savoirs.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CompetenceDetaillee" + }, + { + "$ref": "#/components/schemas/MacroSavoirEtreProfessionnel" + }, + { + "$ref": "#/components/schemas/MacroSavoirFaire" + }, + { + "$ref": "#/components/schemas/Savoir" + } + ] + } + }, + "enjeu": { + "$ref": "#/components/schemas/Enjeu" + } + } + }, + "CompetenceDetaillee": { + "type": "object", + "description": "Compétence détaillée (en provenance du référentiel 'Compétences').", + "allOf": [ + { + "$ref": "#/components/schemas/Competence" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Cette propriété est forcément à la valeur 'COMPETENCE-DETAILLEE'." + } + } + } + ] + }, + "Competence": { + "type": "object", + "description": "Compétence (en provenance du référentiel 'Compétences'). Cette entité se décompose en quatre catégories : les macro-savoir-faires, les macro-savoir-êtres professionnels, les compétences détaillées et enfin les savoirs.", + "properties": { + "code": { + "type": "string", + "description": "Code unique de la compétence.", + "example": "100007" + }, + "libelle": { + "type": "string", + "description": "Libellé de la compétence.", + "example": "Techniques de soudage" + }, + "type": { + "type": "string", + "description": "Le type de l'objet. Il y a quatre valeurs possibles :\n\n" + } + }, + "discriminator": { + "propertyName": "type" + } + }, + "MacroSavoirEtreProfessionnel": { + "type": "object", + "description": "Macro savoir-être professionnel (en provenance du référentiel 'Compétences').", + "allOf": [ + { + "$ref": "#/components/schemas/Competence" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Cette propriété est forcément à la valeur 'MACRO-SAVOIR-ETRE-PROFESSIONNEL'." + } + } + } + ] + }, + "MacroSavoirFaire": { + "type": "object", + "description": "Macro savoir-faire (en provenance du référentiel 'Compétences').", + "allOf": [ + { + "$ref": "#/components/schemas/Competence" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Cette propriété est forcément à la valeur 'MACRO-SAVOIR-FAIRE'." + } + } + } + ] + }, + "Savoir": { + "type": "object", + "description": "Savoir (en provenance du référentiel 'Compétences').", + "properties": { + "code": { + "type": "string", + "description": "Code unique de la compétence.", + "example": "100007" + }, + "libelle": { + "type": "string", + "description": "Libellé de la compétence.", + "example": "Techniques de soudage" + }, + "type": { + "type": "string", + "description": "Cette propriété est forcément à la valeur 'SAVOIR'." + } + } + }, + "Enjeu": { + "type": "object", + "description": "Enjeu (en provenance du référentiel 'Compétences')", + "properties": { + "code": { + "type": "string", + "description": "Code unique de l'enjeu.", + "example": "3" + }, + "libelle": { + "type": "string", + "description": "Libellé de l'enjeu.", + "example": "Animation" + } + } + }, + "GroupeSavoirs": { + "type": "object", + "description": "Groupe de savoirs", + "properties": { + "categorieSavoirs": { + "$ref": "#/components/schemas/CategorieSavoirs" + }, + "savoirs": { + "type": "array", + "description": "Savoirs rattachés", + "items": { + "$ref": "#/components/schemas/Savoir" + } + } + } + }, + "CategorieSavoirs": { + "type": "object", + "description": "Catégorie de savoir (en provenance du référentiel 'Compétences')", + "properties": { + "code": { + "type": "string", + "description": "Code unique de la catégorie de savoirs.", + "example": "30" + }, + "libelle": { + "type": "string", + "description": "Libellé de la catégorie de savoirs.", + "example": "Véhicules" + } + } + }, + "Metier": { + "type": "object", + "description": "Métier (depuis le référentiel 'Métiers')", + "properties": { + "code": { + "type": "string", + "description": "Code unique du métier.", + "example": "A1201" + }, + "libelle": { + "type": "string", + "description": "Libellé unique du métier.", + "example": "Bûcheronnage et élagage" + } + } + }, + "VersionRome": { + "title": "VersionRome", + "type": "object", + "properties": { + "version": { + "type": "string", + "description": "La version actuelle.", + "example": "19" + }, + "lastModifiedDate": { + "type": "string", + "description": "La date de dernière modification de la version.", + "format": "date-time" + } + }, + "description": "Version du rome" + } + } + } +} \ No newline at end of file diff --git a/backend/api/rome_4_metiers.json b/backend/api/rome_4_metiers.json new file mode 100644 index 0000000..d1a0fb5 --- /dev/null +++ b/backend/api/rome_4_metiers.json @@ -0,0 +1,4015 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "ROME 4.0 - Métiers", + "description": "Référentiel des professions caractérisées par une spécificité exigeant un apprentissage, de l'expérience, etc., et entrant dans un cadre légal.
Un métier est une activité professionnelle pouvant nécessiter une formation professionnelle et des compétences métier et transverses garantissant une rémunération (salariée ou non salariée).
Le métier recherché correspond au métier qui peut être exercé avec ou sans délai (avec ou sans action de formation) correspondant soit au métier exercé et perdu, soit à un premier ‘emploi’ lors de l'entrée sur le marché du travail. Il est l’un des éléments permettant de contractualiser l’ORE – Offre Raisonnable d’Emploi - dans le profil de compétences du dossier MAP du demandeur d'emploi.\r\n\r\n**Scopes** : `api_rome-metiersv1`,`nomenclatureRome`\r\n\r\n**Royaume** : `/partenaire`", + "version": "1" + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-metiers" + } + ], + "paths": { + "/v1/metiers/appellation": { + "get": { + "tags": [ + "Appellation" + ], + "summary": "Lister les appellations", + "description": "Permet d'obtenir la liste des appellation des métiers.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "listerAppellations", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "example": "libelle,code", + "enum": [ + "appellationesco(libelle,uri)", + "classification", + "code", + "emploicadre", + "emploireglemente", + "libelle", + "libellecourt", + "metier(emploireglemente,libelle,domaineprofessionnel(libelle,code,granddomaine(libelle,code)),code,emploicadre,riasecmineur,transitionnumerique,riasecmajeur,label,transitionecologiquedetaillee,codeisco,transitionecologique,transitiondemographique)", + "romeparent", + "secondaire", + "transitiondemographique", + "transitionecologique", + "transitionecologiquedetaillee", + "transitionnumerique" + ] + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 6GJu5O_j_Jt6kzMSnibff6Zks9s" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des appellations des métiers.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Appellation" + } + }, + "examples": { + "Retour complet": { + "value": [ + { + "emploiReglemente": false, + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "libelle": "Chef / Cheffe de station fruitière", + "appellationEsco": { + "libelle": "string", + "uri": "string" + }, + "code": "12374", + "emploiCadre": false, + "transitionEcologique": false, + "transitionNumerique": false, + "transitionDemographique": false, + "classification": "PRINCIPALE", + "secondaire": false, + "romeParent": "12374", + "libelleCourt": "Chef de station fruitière", + "metier": { + "emploiReglemente": false, + "libelle": "Bûcheronnage et élagage", + "domaineProfessionnel": { + "libelle": "Production", + "code": "A14", + "grandDomaine": { + "libelle": "Industrie", + "code": "H" + } + }, + "code": "A1201", + "emploiCadre": false, + "riasecMineur": "R", + "transitionNumerique": false, + "riasecMajeur": "R", + "label": "A1201", + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "codeIsco": "6210", + "transitionEcologique": false, + "transitionDemographique": false + } + } + ] + }, + "Retour par défaut": { + "value": [ + { + "libelle": "Chef / Cheffe de station fruitière", + "code": "12374" + } + ] + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-metiers" + } + ] + } + }, + "/v1/metiers/appellation/requete": { + "get": { + "tags": [ + "Appellation" + ], + "summary": "Rechercher une appellation", + "description": "Permet de rechercher des appellations.\r\n\r\nCe service a pour vocation d'être utilisé dans le cas d'une autocomplétion.\r\n\r\nDe ce fait, on peut avoir une différence entre le nombre de résultats affichés (dans le tableau ***resultats***) et le nombre total de résultats disponibles (indiqué dans ***totalResultats***).\r\n\r\nAttention, le sélecteur de champs s'applique uniquement à l'attribut ***resultats*** de la réponse.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "rechercherAppellation", + "parameters": [ + { + "name": "q", + "in": "query", + "description": "Le(s) mot(s) et/ou début de mot(s) recherché(s).", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "qf", + "in": "query", + "description": "Les indexe(s) de recherche (query fields). Si non précisé, on cherche sur le code et libellé.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "fq", + "in": "query", + "description": "Les filtre(s) de recherche (filters query). Ex : fq=code:1 AND (code:2 OR libelle:app). Si non précisé, aucun filtre n'est appliqué.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "op", + "in": "query", + "description": "Lorsque plusieurs mots sont présents dans la recherche (q=mot1 mot2), indique si au moins 1 mot doit correspondre 'OR' ou s'ils doivent tous correspondre 'AND'. Si non précisé, 'OR' est utilisé", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "example": "libelle,code,metier(libelle,code)", + "enum": [ + "appellationesco(libelle,uri)", + "classification", + "secondaire", + "code", + "emploicadre", + "emploireglemente", + "libelle", + "metier(code,libelle,riasecmineur,riasecmajeur)", + "transitiondemographique", + "transitionecologique", + "transitionecologiquedetaillee", + "transitionnumerique" + ] + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 6GJu5O_j_Jt6kzMSnibff6Zks9s" + } + } + ], + "responses": { + "200": { + "description": "Le résultat de la recherche d'appellations pour une autocomplétion.", + "content": { + "application/json": { + "examples": { + "Retour complet": { + "value": { + "totalResultats": 123, + "requete": "string", + "resultats": [ + { + "emploiReglemente": false, + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "libelle": "Chef / Cheffe de station fruitière", + "appellationEsco": { + "libelle": "string", + "uri": "string" + }, + "code": "12374", + "emploiCadre": false, + "transitionEcologique": false, + "transitionNumerique": false, + "transitionDemographique": false, + "classification": "PRINCIPALE", + "secondaire": "12374", + "metier": { + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "riasecMineur": "R", + "riasecMajeur": "R" + } + } + ] + } + }, + "Retour par défaut": { + "value": { + "totalResultats": 123, + "requete": "string", + "resultats": [ + { + "libelle": "Chef / Cheffe de station fruitière", + "code": "12374", + "metier": { + "libelle": "Bûcheronnage et élagage", + "code": "A1201" + } + } + ] + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-metiers" + } + ] + } + }, + "/v1/metiers/appellation/{code}": { + "get": { + "tags": [ + "Appellation" + ], + "summary": "Lire une appellation", + "description": "Permet de lire une appellation depuis son code.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "lireAppellation", + "parameters": [ + { + "name": "code", + "in": "path", + "description": "Code de l'appellation.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "example": "emploireglemente,libelle,obsolete,code,emploicadre,transitionnumerique,classification,competencescles(frequence,competence(libelle,@macrosavoiretreprofessionnel(riasecmajeur,riasecmineur),@competencedetaillee(riasecmajeur,riasecmineur),code,@macrosavoirfaire(riasecmajeur,riasecmineur),codeogr)),transitionecologiquedetaillee,appellationesco(libelle,uri),transitionecologique,transitiondemographique,libellecourt,datefin,metier(emploireglemente,libelle,domaineprofessionnel(libelle,granddomaine(libelle,code),code),code,emploicadre,riasecmineur,transitionnumerique,riasecmajeur,transitionecologiquedetaillee,codeisco,transitionecologique,transitiondemographique)", + "enum": [ + "appellationesco(libelle,uri)", + "appellationsenvisageables(libelle,code,metier(libelle,code,riasecmineur,riasecmajeur))", + "appellationsproches(libelle,code,metier(libelle,code,riasecmineur,riasecmajeur))", + "classification", + "code", + "competencescles(frequence,competence(libelle,@macrosavoiretreprofessionnel(riasecmineur,riasecmajeur),@competencedetaillee(riasecmineur,riasecmajeur),code,@macrosavoirfaire(riasecmineur,riasecmajeur),codeogr))", + "datefin", + "emploicadre", + "emploireglemente", + "libelle", + "libellecourt", + "metier(emploireglemente,libelle,domaineprofessionnel(libelle,code,granddomaine(libelle,code)),code,emploicadre,riasecmineur,transitionnumerique,riasecmajeur,label,transitionecologiquedetaillee,codeisco,transitionecologique,transitiondemographique)", + "metiersenvisageables(libelle,code,riasecmineur,riasecmajeur)", + "metiersproches(libelle,code,riasecmineur,riasecmajeur)", + "obsolete", + "romeparent", + "secondaire", + "transitiondemographique", + "transitionecologique", + "transitionecologiquedetaillee", + "transitionnumerique" + ] + } + }, + { + "name": "date", + "in": "query", + "description": "Date de la recherche au format yyyy-MM-dd ou yyyyMMdd.", + "required": false, + "schema": { + "type": "string", + "format": "date", + "example": "2022-05-28" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 6GJu5O_j_Jt6kzMSnibff6Zks9s" + } + } + ], + "responses": { + "200": { + "description": "Retourne les données d'une appellation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Appellation" + }, + "examples": { + "Retour complet": { + "value": { + "emploiReglemente": false, + "libelle": "Chef / Cheffe de station fruitière", + "secondaire": false, + "obsolete": false, + "code": "12374", + "emploiCadre": false, + "transitionNumerique": false, + "classification": "PRINCIPALE", + "competencesCles": [ + { + "frequence": 123, + "competence": { + "type": "string", + "libelle": "Techniques de soudage", + "riasecMineur": "R", + "riasecMajeur": "R", + "code": "100007", + "codeOgr": "string" + } + } + ], + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "appellationsEnvisageables": [ + { + "libelle": "Chef / Cheffe de station fruitière", + "code": "12374", + "metier": { + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "riasecMineur": "R", + "riasecMajeur": "R" + } + } + ], + "appellationEsco": { + "libelle": "string", + "uri": "string" + }, + "metiersProches": [ + { + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "riasecMineur": "R", + "riasecMajeur": "R" + } + ], + "metiersEnvisageables": [ + { + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "riasecMineur": "R", + "riasecMajeur": "R" + } + ], + "appellationsProches": [ + { + "libelle": "Chef / Cheffe de station fruitière", + "code": "12374", + "metier": { + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "riasecMineur": "R", + "riasecMajeur": "R" + } + } + ], + "transitionEcologique": false, + "transitionDemographique": false, + "romeParent": "12374", + "libelleCourt": "Chef de station fruitière", + "dateFin": "2024-02-23T14:40:14.848Z", + "metier": { + "emploiReglemente": false, + "libelle": "Bûcheronnage et élagage", + "domaineProfessionnel": { + "libelle": "Production", + "code": "A14", + "grandDomaine": { + "libelle": "Industrie", + "code": "H" + } + }, + "code": "A1201", + "emploiCadre": false, + "riasecMineur": "R", + "transitionNumerique": false, + "riasecMajeur": "R", + "label": "A1201", + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "codeIsco": "6210", + "transitionEcologique": false, + "transitionDemographique": false + } + } + }, + "Retour par défaut": { + "value": { + "emploiReglemente": false, + "libelle": "Chef / Cheffe de station fruitière", + "obsolete": false, + "code": "12374", + "emploiCadre": false, + "transitionNumerique": false, + "classification": "PRINCIPALE", + "competencesCles": [ + { + "frequence": 123, + "competence": { + "type": "string", + "libelle": "Techniques de soudage", + "riasecMajeur": "R", + "riasecMineur": "R", + "code": "100007", + "codeOgr": "string" + } + } + ], + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "appellationEsco": { + "libelle": "string", + "uri": "string" + }, + "transitionEcologique": false, + "transitionDemographique": false, + "libelleCourt": "Chef de station fruitière", + "dateFin": "2024-02-23T14:40:14.848Z", + "metier": { + "emploiReglemente": false, + "libelle": "Bûcheronnage et élagage", + "domaineProfessionnel": { + "libelle": "Production", + "grandDomaine": { + "libelle": "Industrie", + "code": "H" + }, + "code": "A14" + }, + "code": "A1201", + "emploiCadre": false, + "riasecMineur": "R", + "transitionNumerique": false, + "riasecMajeur": "R", + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "codeIsco": "6210", + "transitionEcologique": false, + "transitionDemographique": false + } + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "service": "/v1/mon_uri", + "message": "Code inexistant: monCode", + "code": 404 + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-metiers" + } + ] + } + }, + "/v1/metiers/centre-interet": { + "get": { + "tags": [ + "Centre d'intérêt" + ], + "summary": "Lister les centres d'intérêt", + "description": "Permet de lister les centres d'intérêt.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "listerCentreInterets", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "example": "libelle,code", + "enum": [ + "code", + "definition", + "libelle", + "metiers(emploireglemente,libelle,code,emploicadre,riasecmineur,transitionnumerique,riasecmajeur,label,transitionecologiquedetaillee,codeisco,transitionecologique,transitiondemographique,appellations(emploireglemente,transitionecologiquedetaillee,libelle,secondaire,code,emploicadre,transitionecologique,transitionnumerique,transitiondemographique,classification))", + "metierslies(principal,metier(emploireglemente,libelle,code,emploicadre,riasecmineur,transitionnumerique,riasecmajeur,label,transitionecologiquedetaillee,codeisco,transitionecologique,transitiondemographique,appellations(emploireglemente,transitionecologiquedetaillee,libelle,secondaire,code,emploicadre,transitionecologique,transitionnumerique,transitiondemographique,classification,romeparent)))" + ] + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 6GJu5O_j_Jt6kzMSnibff6Zks9s" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des centres d'intérêt.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CentreInteret" + } + }, + "examples": { + "Retour complet": { + "value": [ + { + "libelle": "Je suis amateur / amatrice de sensations fortes", + "code": "25", + "definition": "string", + "metiersLies": [ + { + "principal": false, + "metier": { + "emploiReglemente": false, + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "emploiCadre": false, + "riasecMineur": "R", + "transitionNumerique": false, + "riasecMajeur": "R", + "label": "A1201", + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "codeIsco": "6210", + "transitionEcologique": false, + "transitionDemographique": false, + "appellations": [ + { + "emploiReglemente": false, + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "libelle": "Chef / Cheffe de station fruitière", + "secondaire": false, + "code": "12374", + "emploiCadre": false, + "transitionEcologique": false, + "transitionNumerique": false, + "transitionDemographique": false, + "classification": "PRINCIPALE", + "romeParent": "12374" + } + ] + } + } + ], + "metiers": [ + { + "emploiReglemente": false, + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "emploiCadre": false, + "riasecMineur": "R", + "transitionNumerique": false, + "riasecMajeur": "R", + "label": "A1201", + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "codeIsco": "6210", + "transitionEcologique": false, + "transitionDemographique": false, + "appellations": [ + { + "emploiReglemente": false, + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "libelle": "Chef / Cheffe de station fruitière", + "secondaire": false, + "code": "12374", + "emploiCadre": false, + "transitionEcologique": false, + "transitionNumerique": false, + "transitionDemographique": false, + "classification": "PRINCIPALE" + } + ] + } + ] + } + ] + }, + "Retour par défaut": { + "value": [ + { + "libelle": "Je suis amateur / amatrice de sensations fortes", + "code": "25" + } + ] + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-metiers" + } + ] + } + }, + "/v1/metiers/centre-interet/{code}": { + "get": { + "tags": [ + "Centre d'intérêt" + ], + "summary": "Lire un centre d'intérêt", + "description": "Permet de lire un centre d'intérêt depuis son code.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "lireCentreInteret", + "parameters": [ + { + "name": "code", + "in": "path", + "description": "Code du centre d'intérêt.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "example": "libelle,obsolete,code,definition,datefin", + "enum": [ + "code", + "datefin", + "definition", + "libelle", + "metiers(emploireglemente,libelle,code,emploicadre,riasecmineur,transitionnumerique,riasecmajeur,label,transitionecologiquedetaillee,codeisco,transitionecologique,transitiondemographique,appellations(emploireglemente,transitionecologiquedetaillee,libelle,secondaire,code,emploicadre,transitionecologique,transitionnumerique,transitiondemographique,classification,romeparent))", + "metierslies(principal,metier(emploireglemente,libelle,code,emploicadre,riasecmineur,transitionnumerique,riasecmajeur,label,transitionecologiquedetaillee,codeisco,transitionecologique,transitiondemographique,appellations(emploireglemente,transitionecologiquedetaillee,libelle,secondaire,code,emploicadre,transitionecologique,transitionnumerique,transitiondemographique,classification)))", + "obsolete" + ] + } + }, + { + "name": "date", + "in": "query", + "description": "Date de la recherche au format yyyy-MM-dd ou yyyyMMdd.", + "required": false, + "schema": { + "type": "string", + "format": "date", + "example": "2022-05-28" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 6GJu5O_j_Jt6kzMSnibff6Zks9s" + } + } + ], + "responses": { + "200": { + "description": "Retourne les données d'un centre d'intérêt.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CentreInteret" + }, + "examples": { + "Retour complet": { + "value": { + "libelle": "Je suis amateur / amatrice de sensations fortes", + "obsolete": false, + "code": "25", + "definition": "string", + "metiersLies": [ + { + "principal": false, + "metier": { + "emploiReglemente": false, + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "emploiCadre": false, + "riasecMineur": "R", + "transitionNumerique": false, + "riasecMajeur": "R", + "label": "A1201", + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "codeIsco": "6210", + "transitionEcologique": false, + "transitionDemographique": false, + "appellations": [ + { + "emploiReglemente": false, + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "libelle": "Chef / Cheffe de station fruitière", + "secondaire": false, + "code": "12374", + "emploiCadre": false, + "transitionEcologique": false, + "transitionNumerique": false, + "transitionDemographique": false, + "classification": "PRINCIPALE" + } + ] + } + } + ], + "metiers": [ + { + "emploiReglemente": false, + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "emploiCadre": false, + "riasecMineur": "R", + "transitionNumerique": false, + "riasecMajeur": "R", + "label": "A1201", + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "codeIsco": "6210", + "transitionEcologique": false, + "transitionDemographique": false, + "appellations": [ + { + "emploiReglemente": false, + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "libelle": "Chef / Cheffe de station fruitière", + "secondaire": false, + "code": "12374", + "emploiCadre": false, + "transitionEcologique": false, + "transitionNumerique": false, + "transitionDemographique": false, + "classification": "PRINCIPALE", + "romeParent": "12374" + } + ] + } + ], + "dateFin": "2024-02-23T14:40:14.848Z" + } + }, + "Retour par défaut": { + "value": { + "libelle": "Je suis amateur / amatrice de sensations fortes", + "obsolete": false, + "code": "25", + "definition": "string", + "dateFin": "2024-02-23T14:40:14.848Z" + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "service": "/v1/mon_uri", + "message": "Code inexistant: monCode", + "code": 404 + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-metiers" + } + ] + } + }, + "/v1/metiers/domaine-professionnel": { + "get": { + "tags": [ + "Domaine professionnel" + ], + "summary": "Lister les domaines professionnels", + "description": "Permet de lister les domaines professionnels.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "listerDomainesProfessionnels", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "example": "libelle,code", + "enum": [ + "code", + "granddomaine(libelle,code)", + "libelle", + "metiers(label,transitionecologiquedetaillee,libelle,codeisco,code,riasecmineur,transitionecologique,transitionnumerique,appellations(emploireglemente,transitionecologiquedetaillee,libelle,secondaire,code,emploicadre,transitionecologique,transitionnumerique,transitiondemographique,classification,romeparent),riasecmajeur)" + ] + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 6GJu5O_j_Jt6kzMSnibff6Zks9s" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des domaines professionnels", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DomaineProfessionnel" + } + }, + "examples": { + "Retour complet": { + "value": [ + { + "libelle": "Production", + "code": "A14", + "grandDomaine": { + "libelle": "Industrie", + "code": "H" + }, + "metiers": [ + { + "label": "A1201", + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "libelle": "Bûcheronnage et élagage", + "codeIsco": "6210", + "code": "A1201", + "riasecMineur": "R", + "transitionEcologique": false, + "transitionNumerique": false, + "appellations": [ + { + "emploiReglemente": false, + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "libelle": "Chef / Cheffe de station fruitière", + "secondaire": false, + "code": "12374", + "emploiCadre": false, + "transitionEcologique": false, + "transitionNumerique": false, + "transitionDemographique": false, + "classification": "PRINCIPALE", + "romeParent": "12374" + } + ], + "riasecMajeur": "R" + } + ] + } + ] + }, + "Retour par défaut": { + "value": [ + { + "libelle": "Production", + "code": "A14" + } + ] + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-metiers" + } + ] + } + }, + "/v1/metiers/domaine-professionnel/{code}": { + "get": { + "tags": [ + "Domaine professionnel" + ], + "summary": "Lire un domaine professionnel", + "description": "Permet de lire un domaine professionnel depuis son code.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "lireDomaineProfessionnel", + "parameters": [ + { + "name": "code", + "in": "path", + "description": "Code du domaine professionnel.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "example": "libelle,obsolete,code,granddomaine(libelle,code),datefin", + "enum": [ + "code", + "datefin", + "granddomaine(libelle,code)", + "libelle", + "metiers(emploireglemente,libelle,code,emploicadre,riasecmineur,transitionnumerique,riasecmajeur,label,transitionecologiquedetaillee,codeisco,transitionecologique,transitiondemographique,appellations(emploireglemente,transitionecologiquedetaillee,libelle,secondaire,code,emploicadre,transitionecologique,transitionnumerique,transitiondemographique,classification,romeparent))", + "obsolete" + ] + } + }, + { + "name": "date", + "in": "query", + "description": "Date de la recherche au format yyyy-MM-dd ou yyyyMMdd.", + "required": false, + "schema": { + "type": "string", + "format": "date", + "example": "2022-05-28" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 6GJu5O_j_Jt6kzMSnibff6Zks9s" + } + } + ], + "responses": { + "200": { + "description": "Retourne les données d'un domaine professionnel.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DomaineProfessionnel" + }, + "examples": { + "Retour complet": { + "value": { + "libelle": "Production", + "obsolete": false, + "code": "A14", + "grandDomaine": { + "libelle": "Industrie", + "code": "H" + }, + "metiers": [ + { + "emploiReglemente": false, + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "emploiCadre": false, + "riasecMineur": "R", + "transitionNumerique": false, + "riasecMajeur": "R", + "label": "A1201", + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "codeIsco": "6210", + "transitionEcologique": false, + "transitionDemographique": false, + "appellations": [ + { + "emploiReglemente": false, + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "libelle": "Chef / Cheffe de station fruitière", + "secondaire": false, + "code": "12374", + "emploiCadre": false, + "transitionEcologique": false, + "transitionNumerique": false, + "transitionDemographique": false, + "classification": "PRINCIPALE", + "romeParent": "12374" + } + ] + } + ], + "dateFin": "2024-02-23T14:40:14.848Z" + } + }, + "Retour par défaut": { + "value": { + "libelle": "Production", + "obsolete": false, + "code": "A14", + "grandDomaine": { + "libelle": "Industrie", + "code": "H" + }, + "dateFin": "2024-02-23T14:40:14.848Z" + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "service": "/v1/mon_uri", + "message": "Code inexistant: monCode", + "code": 404 + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-metiers" + } + ] + } + }, + "/v1/metiers/grand-domaine": { + "get": { + "tags": [ + "Grand domaine" + ], + "summary": "Lister les grands domaines", + "description": "Permet de lister les grands domaines des métiers.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "listerGrandDomaines", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "example": "libelle,code", + "enum": [ + "code", + "domaineprofessionnels(libelle,code,metiers(label,transitionecologiquedetaillee,libelle,codeisco,code,riasecmineur,transitionecologique,transitionnumerique,appellations(emploireglemente,transitionecologiquedetaillee,libelle,secondaire,code,emploicadre,transitionecologique,transitionnumerique,transitiondemographique,classification,romeparent),riasecmajeur))", + "libelle" + ] + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 6GJu5O_j_Jt6kzMSnibff6Zks9s" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des grands domaines", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GrandDomaine" + } + }, + "examples": { + "Retour complet": { + "value": [ + { + "libelle": "Industrie", + "domaineProfessionnels": [ + { + "libelle": "Production", + "code": "A14", + "metiers": [ + { + "label": "A1201", + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "libelle": "Bûcheronnage et élagage", + "codeIsco": "6210", + "code": "A1201", + "riasecMineur": "R", + "transitionEcologique": false, + "transitionNumerique": false, + "appellations": [ + { + "emploiReglemente": false, + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "libelle": "Chef / Cheffe de station fruitière", + "secondaire": false, + "code": "12374", + "emploiCadre": false, + "transitionEcologique": false, + "transitionNumerique": false, + "transitionDemographique": false, + "classification": "PRINCIPALE", + "romeParent": "12374" + } + ], + "riasecMajeur": "R" + } + ] + } + ], + "code": "H" + } + ] + }, + "Retour par défaut": { + "value": [ + { + "libelle": "Industrie", + "code": "H" + } + ] + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-metiers" + } + ] + } + }, + "/v1/metiers/grand-domaine/{code}": { + "get": { + "tags": [ + "Grand domaine" + ], + "summary": "Lire un grand domaine", + "description": "Permet de lire un grand domaine depuis son code.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "lireGrandDomaine", + "parameters": [ + { + "name": "code", + "in": "path", + "description": "Code du grand domaine.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "example": "libelle,obsolete,code,datefin", + "enum": [ + "code", + "datefin", + "domaineprofessionnels(libelle,code,metiers(emploireglemente,libelle,code,emploicadre,riasecmineur,transitionnumerique,riasecmajeur,label,transitionecologiquedetaillee,codeisco,transitionecologique,transitiondemographique,appellations(emploireglemente,transitionecologiquedetaillee,libelle,secondaire,code,emploicadre,transitionecologique,transitionnumerique,transitiondemographique,classification,romeparent)))", + "libelle", + "obsolete" + ] + } + }, + { + "name": "date", + "in": "query", + "description": "Date de la recherche au format yyyy-MM-dd ou yyyyMMdd.", + "required": false, + "schema": { + "type": "string", + "format": "date", + "example": "2022-05-28" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 6GJu5O_j_Jt6kzMSnibff6Zks9s" + } + } + ], + "responses": { + "200": { + "description": "Retourne les données d'un grand domaine.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GrandDomaine" + }, + "examples": { + "Retour complet": { + "value": { + "libelle": "Industrie", + "domaineProfessionnels": [ + { + "libelle": "Production", + "code": "A14", + "metiers": [ + { + "emploiReglemente": false, + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "emploiCadre": false, + "riasecMineur": "R", + "transitionNumerique": false, + "riasecMajeur": "R", + "label": "A1201", + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "codeIsco": "6210", + "transitionEcologique": false, + "transitionDemographique": false, + "appellations": [ + { + "emploiReglemente": false, + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "libelle": "Chef / Cheffe de station fruitière", + "secondaire": false, + "code": "12374", + "emploiCadre": false, + "transitionEcologique": false, + "transitionNumerique": false, + "transitionDemographique": false, + "classification": "PRINCIPALE", + "romeParent": "12374" + } + ] + } + ] + } + ], + "obsolete": false, + "code": "H", + "dateFin": "2024-02-23T14:40:14.848Z" + } + }, + "Retour par défaut": { + "value": { + "libelle": "Industrie", + "obsolete": false, + "code": "H", + "dateFin": "2024-02-23T14:40:14.848Z" + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "service": "/v1/mon_uri", + "message": "Code inexistant: monCode", + "code": 404 + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-metiers" + } + ] + } + }, + "/v1/metiers/metier": { + "get": { + "tags": [ + "Métier" + ], + "summary": "Lister les métiers", + "description": "Permet de lister les métiers.\r\n\r\nIl est possible de filtrer les métiers selon leur Riasec (majeur et/ou mineur), le code d'une des divisions NAF auquel il est rattaché ou encore selon la compétence mobilisée (principale, émergente ou autre) auquel il est lié.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "listerMetiers", + "parameters": [ + { + "name": "riasec-majeur", + "in": "query", + "description": "Riasec majeur.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "riasec-mineur", + "in": "query", + "description": "Riasec mineur.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "code-naf", + "in": "query", + "description": "Code de la division NAF.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "code-competence", + "in": "query", + "description": "Code compétence.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "example": "formacodes(libelle,code),libelle,code", + "enum": [ + "accesemploi", + "appellations(emploireglemente,transitionecologiquedetaillee,libelle,secondaire,code,emploicadre,transitionecologique,transitionnumerique,transitiondemographique,classification,romeparent,libellecourt)", + "code", + "codeisco", + "definition", + "domaineprofessionnel(libelle,code,granddomaine(libelle,code))", + "emploicadre", + "emploireglemente", + "formacodes(libelle,code)", + "label", + "libelle", + "riasecmajeur", + "riasecmineur", + "transitiondemographique", + "transitionecologique", + "transitionecologiquedetaillee", + "transitionnumerique" + ] + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 6GJu5O_j_Jt6kzMSnibff6Zks9s" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des métiers", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metier" + } + }, + "examples": { + "Retour complet": { + "value": [ + { + "emploiReglemente": false, + "formacodes": [ + { + "libelle": "culture algue", + "code": "21317" + } + ], + "libelle": "Bûcheronnage et élagage", + "domaineProfessionnel": { + "libelle": "Production", + "code": "A14", + "grandDomaine": { + "libelle": "Industrie", + "code": "H" + } + }, + "code": "A1201", + "emploiCadre": false, + "definition": "Réalise des opérations de coupe et d'entretien d'arbres", + "riasecMineur": "R", + "transitionNumerique": false, + "riasecMajeur": "R", + "label": "A1201", + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "codeIsco": "6210", + "transitionEcologique": false, + "transitionDemographique": false, + "appellations": [ + { + "emploiReglemente": false, + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "libelle": "Chef / Cheffe de station fruitière", + "secondaire": false, + "code": "12374", + "emploiCadre": false, + "transitionEcologique": false, + "transitionNumerique": false, + "transitionDemographique": false, + "classification": "PRINCIPALE", + "romeParent": "12374", + "libelleCourt": "Chef de station fruitière" + } + ], + "accesEmploi": "Ce métier est accessible avec un CAP/BEP Agricole en travaux forestiers et bûcheronnage." + } + ] + }, + "Retour par défaut": { + "value": [ + { + "formacodes": [ + { + "libelle": "culture algue", + "code": "21317" + } + ], + "libelle": "Bûcheronnage et élagage", + "code": "A1201" + } + ] + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-metiers" + } + ] + } + }, + "/v1/metiers/metier/requete": { + "get": { + "tags": [ + "Métier" + ], + "summary": "Rechercher un métier", + "description": "Permet de rechercher des métiers.\r\n\r\n\nCe service a pour vocation d'être utilisé dans le cas d'une autocomplétion.\r\n\r\n\nDe ce fait, on peut avoir une différence entre le nombre de résultats affichés (dans le tableau ***resultats***) et le nombre total de résultats disponibles (indiqué dans ***totalResultats***).\r\n\r\n\nAttention, le sélecteur de champs s'applique uniquement à l'attribut ***resultats*** de la réponse.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple pour voir les données retournées)", + "operationId": "recherchermetier", + "parameters": [ + { + "name": "q", + "in": "query", + "description": "Le(s) mot(s) et/ou début de mot(s) recherché(s).", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "qf", + "in": "query", + "description": "Les indexe(s) de recherche (query fields). Si non précisé, on cherche sur le code et libellé.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "fq", + "in": "query", + "description": "Les filtre(s) de recherche (filters query). Ex : fq=code:1 AND (code:2 OR libelle:app). Si non précisé, aucun filtre n'est appliqué.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "op", + "in": "query", + "description": "Lorsque plusieurs mots sont présents dans la recherche (q=mot1 mot2), indique si au moins 1 mot doit correspondre 'OR' ou s'ils doivent tous correspondre 'AND'. Si non précisé, 'OR' est utilisé", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider de l'exemple de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "example": "riasecmineur,riasecmajeur,libelle,code", + "enum": [ + "code", + "libelle", + "riasecmineur", + "riasecmajeur" + ] + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 6GJu5O_j_Jt6kzMSnibff6Zks9s" + } + } + ], + "responses": { + "200": { + "description": "Le résultat de la recherche de métiers pour une autocomplétion.", + "content": { + "application/json": { + "examples": { + "Retour du service": { + "value": { + "totalResultats": 123, + "requete": "string", + "resultats": [ + { + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "riasecMineur": "R", + "riasecMajeur": "R" + } + ] + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-metiers" + } + ] + } + }, + "/v1/metiers/metier/{code}": { + "get": { + "tags": [ + "Métier" + ], + "summary": "Lire un métier", + "description": "Permet de lire un métier depuis son code.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "lireMetier", + "parameters": [ + { + "name": "code", + "in": "path", + "description": "Code du métier.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "example": "emploireglemente,formacodes(libelle,code),libelle,domaineprofessionnel(libelle,granddomaine(libelle,code),code),obsolete,code,definition,secteursactiviteslies(secteuractivite(libelle,code,secteuractivite(libelle,code)),principal),divisionsnaf(libelle,code),riasecmajeur,transitionecologiquedetaillee,themes(libelle,code),transitionecologique,datefin,competencesmobiliseesprincipales(libelle,@macrosavoiretreprofessionnel(riasecmajeur,riasecmineur),@competencedetaillee(riasecmajeur,riasecmineur),code,@macrosavoirfaire(riasecmajeur,riasecmineur),codeogr),emploicadre,riasecmineur,transitionnumerique,contextestravail(libelle,code,categorie),codeisco,centresinterets(libelle,code),competencesmobilisees(libelle,@macrosavoiretreprofessionnel(riasecmajeur,riasecmineur),@competencedetaillee(riasecmajeur,riasecmineur),code,@macrosavoirfaire(riasecmajeur,riasecmineur),codeogr),transitiondemographique,secteursactivites(libelle,code,secteuractivite(libelle,code)),appellations(emploireglemente,transitionecologiquedetaillee,libelle,code,emploicadre,transitionecologique,transitionnumerique,transitiondemographique,classification,libellecourt,competencescles(frequence,competence(libelle,codeogr,code))),competencesmobiliseesemergentes(libelle,@macrosavoiretreprofessionnel(riasecmajeur,riasecmineur),@competencedetaillee(riasecmajeur,riasecmineur),code,@macrosavoirfaire(riasecmajeur,riasecmineur),codeogr),centresinteretslies(centreinteret(libelle,code),principal),accesemploi", + "enum": [ + "accesemploi", + "appellations(emploireglemente,libelle,secondaire,code,emploicadre,transitionnumerique,classification,competencescles(frequence,competence(libelle,code,codeogr)),transitionecologiquedetaillee,appellationsenvisageables(libelle,code,metier(libelle,code,riasecmineur,riasecmajeur)),metiersproches(libelle,code,riasecmineur,riasecmajeur),metiersenvisageables(libelle,code,riasecmineur,riasecmajeur),appellationsproches(libelle,code,metier(libelle,code,riasecmineur,riasecmajeur)),transitionecologique,transitiondemographique,romeparent,libellecourt)", + "appellationsenvisageables(libelle,code,metier(libelle,code,riasecmineur,riasecmajeur))", + "appellationsproches(libelle,code,metier(libelle,code,riasecmineur,riasecmajeur))", + "centresinterets(libelle,code,definition)", + "centresinteretslies(centreinteret(libelle,code,definition),principal)", + "code", + "codeisco", + "competencesmobilisees(libelle,@macrosavoiretreprofessionnel(riasecmineur,riasecmajeur),@competencedetaillee(riasecmineur,riasecmajeur),code,@macrosavoirfaire(riasecmineur,riasecmajeur),codeogr)", + "competencesmobiliseesemergentes(libelle,@macrosavoiretreprofessionnel(riasecmineur,riasecmajeur),@competencedetaillee(riasecmineur,riasecmajeur),code,@macrosavoirfaire(riasecmineur,riasecmajeur),codeogr)", + "competencesmobiliseesprincipales(libelle,@macrosavoiretreprofessionnel(riasecmineur,riasecmajeur),@competencedetaillee(riasecmineur,riasecmajeur),code,@macrosavoirfaire(riasecmineur,riasecmajeur),codeogr)", + "contextestravail(libelle,code,categorie)", + "datefin", + "definition", + "divisionsnaf(libelle,code)", + "domaineprofessionnel(libelle,code,granddomaine(libelle,code))", + "emploicadre", + "emploireglemente", + "formacodes(libelle,code)", + "label", + "libelle", + "metiersenproximite(libelle,code,riasecmineur,riasecmajeur)", + "metiersenvisageables(libelle,code,riasecmineur,riasecmajeur)", + "metiersproches(libelle,code,riasecmineur,riasecmajeur)", + "obsolete", + "riasecmajeur", + "riasecmineur", + "secteursactivites(libelle,code,secteuractivite(libelle,code,definition),definition)", + "secteursactiviteslies(secteuractivite(libelle,code,secteuractivite(libelle,code,definition),definition),principal)", + "themes(libelle,code)", + "transitiondemographique", + "transitionecologique", + "transitionecologiquedetaillee", + "transitionnumerique" + ] + } + }, + { + "name": "date", + "in": "query", + "description": "Date de la recherche au format yyyy-MM-dd ou yyyyMMdd.", + "required": false, + "schema": { + "type": "string", + "format": "date", + "example": "2022-05-28" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 6GJu5O_j_Jt6kzMSnibff6Zks9s" + } + } + ], + "responses": { + "200": { + "description": "Retourne les données d'un métier.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Metier" + }, + "examples": { + "Retour complet": { + "value": { + "emploiReglemente": false, + "formacodes": [ + { + "libelle": "culture algue", + "code": "21317" + } + ], + "libelle": "Bûcheronnage et élagage", + "domaineProfessionnel": { + "libelle": "Production", + "code": "A14", + "grandDomaine": { + "libelle": "Industrie", + "code": "H" + } + }, + "obsolete": false, + "code": "A1201", + "definition": "Réalise des opérations de coupe et d'entretien d'arbres", + "secteursActivitesLies": [ + { + "secteurActivite": { + "libelle": "Agriculture et élevage", + "code": "79", + "secteurActivite": { + "libelle": "Agriculture et élevage", + "code": "79", + "definition": "string" + }, + "definition": "string" + }, + "principal": false + } + ], + "divisionsNaf": [ + { + "libelle": "Métallurgie", + "code": "24" + } + ], + "riasecMajeur": "R", + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "themes": [ + { + "libelle": "Métiers auprès des enfants", + "code": "12" + } + ], + "appellationsEnvisageables": [ + { + "libelle": "Chef / Cheffe de station fruitière", + "code": "12374", + "metier": { + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "riasecMineur": "R", + "riasecMajeur": "R" + } + } + ], + "metiersEnvisageables": [ + { + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "riasecMineur": "R", + "riasecMajeur": "R" + } + ], + "transitionEcologique": false, + "dateFin": "2024-02-23T14:40:14.848Z", + "competencesMobiliseesPrincipales": [ + { + "type": "string", + "libelle": "Techniques de soudage", + "riasecMineur": "R", + "riasecMajeur": "R", + "code": "100007", + "codeOgr": "string" + } + ], + "emploiCadre": false, + "riasecMineur": "R", + "transitionNumerique": false, + "contextesTravail": [ + { + "libelle": "En club sportif", + "code": "403091", + "categorie": "CONDITIONS_TRAVAIL" + } + ], + "label": "A1201", + "codeIsco": "6210", + "metiersProches": [ + { + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "riasecMineur": "R", + "riasecMajeur": "R" + } + ], + "centresInterets": [ + { + "libelle": "Je suis amateur / amatrice de sensations fortes", + "code": "25", + "definition": "string" + } + ], + "competencesMobilisees": [ + { + "type": "string", + "libelle": "Techniques de soudage", + "riasecMineur": "R", + "riasecMajeur": "R", + "code": "100007", + "codeOgr": "string" + } + ], + "appellationsProches": [ + { + "libelle": "Chef / Cheffe de station fruitière", + "code": "12374", + "metier": { + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "riasecMineur": "R", + "riasecMajeur": "R" + } + } + ], + "transitionDemographique": false, + "secteursActivites": [ + { + "libelle": "Agriculture et élevage", + "code": "79", + "secteurActivite": { + "libelle": "Agriculture et élevage", + "code": "79", + "definition": "string" + }, + "definition": "string" + } + ], + "metiersEnProximite": [ + { + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "riasecMineur": "R", + "riasecMajeur": "R" + } + ], + "appellations": [ + { + "emploiReglemente": false, + "libelle": "Chef / Cheffe de station fruitière", + "secondaire": false, + "code": "12374", + "emploiCadre": false, + "transitionNumerique": false, + "classification": "PRINCIPALE", + "competencesCles": [ + { + "frequence": 123, + "competence": { + "type": "string", + "libelle": "Techniques de soudage", + "code": "100007", + "codeOgr": "string" + } + } + ], + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "appellationsEnvisageables": [ + { + "libelle": "Chef / Cheffe de station fruitière", + "code": "12374", + "metier": { + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "riasecMineur": "R", + "riasecMajeur": "R" + } + } + ], + "metiersProches": [ + { + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "riasecMineur": "R", + "riasecMajeur": "R" + } + ], + "metiersEnvisageables": [ + { + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "riasecMineur": "R", + "riasecMajeur": "R" + } + ], + "appellationsProches": [ + { + "libelle": "Chef / Cheffe de station fruitière", + "code": "12374", + "metier": { + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "riasecMineur": "R", + "riasecMajeur": "R" + } + } + ], + "transitionEcologique": false, + "transitionDemographique": false, + "romeParent": "12374", + "libelleCourt": "Chef de station fruitière" + } + ], + "competencesMobiliseesEmergentes": [ + { + "type": "string", + "libelle": "Techniques de soudage", + "riasecMineur": "R", + "riasecMajeur": "R", + "code": "100007", + "codeOgr": "string" + } + ], + "centresInteretsLies": [ + { + "centreInteret": { + "libelle": "Je suis amateur / amatrice de sensations fortes", + "code": "25", + "definition": "string" + }, + "principal": false + } + ], + "accesEmploi": "Ce métier est accessible avec un CAP/BEP Agricole en travaux forestiers et bûcheronnage." + } + }, + "Retour par défaut": { + "value": { + "emploiReglemente": false, + "formacodes": [ + { + "libelle": "culture algue", + "code": "21317" + } + ], + "libelle": "Bûcheronnage et élagage", + "domaineProfessionnel": { + "libelle": "Production", + "grandDomaine": { + "libelle": "Industrie", + "code": "H" + }, + "code": "A14" + }, + "obsolete": false, + "code": "A1201", + "definition": "Réalise des opérations de coupe et d'entretien d'arbres", + "secteursActivitesLies": [ + { + "secteurActivite": { + "libelle": "Agriculture et élevage", + "code": "79", + "secteurActivite": { + "libelle": "Agriculture et élevage", + "code": "79" + } + }, + "principal": false + } + ], + "divisionsNaf": [ + { + "libelle": "Métallurgie", + "code": "24" + } + ], + "riasecMajeur": "R", + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "themes": [ + { + "libelle": "Métiers auprès des enfants", + "code": "12" + } + ], + "transitionEcologique": false, + "dateFin": "2024-02-23T14:40:14.848Z", + "competencesMobiliseesPrincipales": [ + { + "type": "string", + "libelle": "Techniques de soudage", + "riasecMajeur": "R", + "riasecMineur": "R", + "code": "100007", + "codeOgr": "string" + } + ], + "emploiCadre": false, + "riasecMineur": "R", + "transitionNumerique": false, + "contextesTravail": [ + { + "libelle": "En club sportif", + "code": "403091", + "categorie": "CONDITIONS_TRAVAIL" + } + ], + "codeIsco": "6210", + "centresInterets": [ + { + "libelle": "Je suis amateur / amatrice de sensations fortes", + "code": "25" + } + ], + "competencesMobilisees": [ + { + "type": "string", + "libelle": "Techniques de soudage", + "riasecMajeur": "R", + "riasecMineur": "R", + "code": "100007", + "codeOgr": "string" + } + ], + "transitionDemographique": false, + "secteursActivites": [ + { + "libelle": "Agriculture et élevage", + "code": "79", + "secteurActivite": { + "libelle": "Agriculture et élevage", + "code": "79" + } + } + ], + "appellations": [ + { + "emploiReglemente": false, + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "libelle": "Chef / Cheffe de station fruitière", + "code": "12374", + "emploiCadre": false, + "transitionEcologique": false, + "transitionNumerique": false, + "transitionDemographique": false, + "classification": "PRINCIPALE", + "libelleCourt": "Chef de station fruitière", + "competencesCles": [ + { + "frequence": 123, + "competence": { + "type": "string", + "libelle": "Techniques de soudage", + "codeOgr": "string", + "code": "100007" + } + } + ] + } + ], + "competencesMobiliseesEmergentes": [ + { + "type": "string", + "libelle": "Techniques de soudage", + "riasecMajeur": "R", + "riasecMineur": "R", + "code": "100007", + "codeOgr": "string" + } + ], + "centresInteretsLies": [ + { + "centreInteret": { + "libelle": "Je suis amateur / amatrice de sensations fortes", + "code": "25" + }, + "principal": false + } + ], + "accesEmploi": "Ce métier est accessible avec un CAP/BEP Agricole en travaux forestiers et bûcheronnage." + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "service": "/v1/mon_uri", + "message": "Code inexistant: monCode", + "code": 404 + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-metiers" + } + ] + } + }, + "/v1/metiers/secteur-activite": { + "get": { + "tags": [ + "Secteur d'activités" + ], + "summary": "Lister les secteurs d'activités", + "description": "Permet de lister les secteurs d'activités des métiers.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "listerSecteurActivites", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "example": "libelle,code", + "enum": [ + "code", + "definition", + "libelle", + "metiers(emploireglemente,libelle,code,emploicadre,riasecmineur,transitionnumerique,riasecmajeur,label,transitionecologiquedetaillee,codeisco,transitionecologique,transitiondemographique,appellations(emploireglemente,transitionecologiquedetaillee,libelle,secondaire,code,emploicadre,transitionecologique,transitionnumerique,transitiondemographique,classification,romeParent))", + "metierslies(principal,metier(emploireglemente,libelle,code,emploicadre,riasecmineur,transitionnumerique,riasecmajeur,label,transitionecologiquedetaillee,codeisco,transitionecologique,transitiondemographique,appellations(emploireglemente,transitionecologiquedetaillee,libelle,secondaire,code,emploicadre,transitionecologique,transitionnumerique,transitiondemographique,classification,romeparent)))", + "secteuractivite(libelle,code,definition)", + "soussecteurs(libelle,code,definition)" + ] + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 6GJu5O_j_Jt6kzMSnibff6Zks9s" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des secteurs d'activités.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SecteurActivite" + } + }, + "examples": { + "Retour complet": { + "value": [ + { + "libelle": "Agriculture et élevage", + "code": "79", + "secteurActivite": { + "libelle": "Agriculture et élevage", + "code": "79", + "definition": "string" + }, + "definition": "string", + "metiersLies": [ + { + "principal": false, + "metier": { + "emploiReglemente": false, + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "emploiCadre": false, + "riasecMineur": "R", + "transitionNumerique": false, + "riasecMajeur": "R", + "label": "A1201", + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "codeIsco": "6210", + "transitionEcologique": false, + "transitionDemographique": false, + "appellations": [ + { + "emploiReglemente": false, + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "libelle": "Chef / Cheffe de station fruitière", + "secondaire": false, + "code": "12374", + "emploiCadre": false, + "transitionEcologique": false, + "transitionNumerique": false, + "transitionDemographique": false, + "classification": "PRINCIPALE", + "romeParent": "12374" + } + ] + } + } + ], + "sousSecteurs": [ + { + "libelle": "Agriculture et élevage", + "code": "79", + "definition": "string" + } + ], + "metiers": [ + { + "emploiReglemente": false, + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "emploiCadre": false, + "riasecMineur": "R", + "transitionNumerique": false, + "riasecMajeur": "R", + "label": "A1201", + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "codeIsco": "6210", + "transitionEcologique": false, + "transitionDemographique": false, + "appellations": [ + { + "emploiReglemente": false, + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "libelle": "Chef / Cheffe de station fruitière", + "secondaire": false, + "code": "12374", + "emploiCadre": false, + "transitionEcologique": false, + "transitionNumerique": false, + "transitionDemographique": false, + "classification": "PRINCIPALE", + "romeParent": "12374" + } + ] + } + ] + } + ] + }, + "Retour par défaut": { + "value": [ + { + "libelle": "Agriculture et élevage", + "code": "79" + } + ] + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-metiers" + } + ] + } + }, + "/v1/metiers/secteur-activite/{code}": { + "get": { + "tags": [ + "Secteur d'activités" + ], + "summary": "Lire un secteur d'activités", + "description": "Permet de lire un secteur d'activités depuis son code.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "lireSecteurActivite", + "parameters": [ + { + "name": "code", + "in": "path", + "description": "Code du secteur d'activités.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "example": "libelle,obsolete,code,secteuractivite(libelle,code,definition),definition,datefin", + "enum": [ + "code", + "datefin", + "definition", + "libelle", + "metiers(emploireglemente,libelle,code,emploicadre,riasecmineur,transitionnumerique,riasecmajeur,label,transitionecologiquedetaillee,codeisco,transitionecologique,transitiondemographique,appellations(emploireglemente,transitionecologiquedetaillee,libelle,secondaire,code,emploicadre,transitionecologique,transitionnumerique,transitiondemographique,classification,romeparent))", + "metierslies(principal,metier(emploireglemente,libelle,code,emploicadre,riasecmineur,transitionnumerique,riasecmajeur,label,transitionecologiquedetaillee,codeisco,transitionecologique,transitiondemographique,appellations(emploireglemente,transitionecologiquedetaillee,libelle,secondaire,code,emploicadre,transitionecologique,transitionnumerique,transitiondemographique,classification,romeparent)))", + "obsolete", + "secteuractivite(libelle,code,definition)", + "soussecteurs(libelle,code,definition)" + ] + } + }, + { + "name": "date", + "in": "query", + "description": "Date de la recherche au format yyyy-MM-dd ou yyyyMMdd.", + "required": false, + "schema": { + "type": "string", + "format": "date", + "example": "2022-05-28" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 6GJu5O_j_Jt6kzMSnibff6Zks9s" + } + } + ], + "responses": { + "200": { + "description": "Retourne les données d'un secteur d'activités.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SecteurActivite" + }, + "examples": { + "Retour complet": { + "value": { + "libelle": "Agriculture et élevage", + "obsolete": false, + "code": "79", + "secteurActivite": { + "libelle": "Agriculture et élevage", + "code": "79", + "definition": "string" + }, + "definition": "string", + "metiersLies": [ + { + "principal": false, + "metier": { + "emploiReglemente": false, + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "emploiCadre": false, + "riasecMineur": "R", + "transitionNumerique": false, + "riasecMajeur": "R", + "label": "A1201", + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "codeIsco": "6210", + "transitionEcologique": false, + "transitionDemographique": false, + "appellations": [ + { + "emploiReglemente": false, + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "libelle": "Chef / Cheffe de station fruitière", + "secondaire": false, + "code": "12374", + "emploiCadre": false, + "transitionEcologique": false, + "transitionNumerique": false, + "transitionDemographique": false, + "classification": "PRINCIPALE", + "romeParent": "12374" + } + ] + } + } + ], + "sousSecteurs": [ + { + "libelle": "Agriculture et élevage", + "code": "79", + "definition": "string" + } + ], + "metiers": [ + { + "emploiReglemente": false, + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "emploiCadre": false, + "riasecMineur": "R", + "transitionNumerique": false, + "riasecMajeur": "R", + "label": "A1201", + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "codeIsco": "6210", + "transitionEcologique": false, + "transitionDemographique": false, + "appellations": [ + { + "emploiReglemente": false, + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "libelle": "Chef / Cheffe de station fruitière", + "secondaire": false, + "code": "12374", + "emploiCadre": false, + "transitionEcologique": false, + "transitionNumerique": false, + "transitionDemographique": false, + "classification": "PRINCIPALE", + "romeParent": "12374" + } + ] + } + ], + "dateFin": "2024-02-23T14:40:14.848Z" + } + }, + "Retour par défaut": { + "value": { + "libelle": "Agriculture et élevage", + "obsolete": false, + "code": "79", + "secteurActivite": { + "libelle": "Agriculture et élevage", + "code": "79", + "definition": "string" + }, + "definition": "string", + "dateFin": "2024-02-23T14:40:14.848Z" + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "service": "/v1/mon_uri", + "message": "Code inexistant: monCode", + "code": 404 + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-metiers" + } + ] + } + }, + "/v1/metiers/theme": { + "get": { + "tags": [ + "Thème" + ], + "summary": "Lister les thèmes", + "description": "Permet de lister les thèmes des métiers.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "listerThemes", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "example": "libelle,code", + "enum": [ + "code", + "definition", + "libelle", + "metiers(label,transitionecologiquedetaillee,libelle,codeisco,code,riasecmineur,transitionecologique,transitionnumerique,appellations(emploireglemente,transitionecologiquedetaillee,libelle,secondaire,code,emploicadre,transitionecologique,transitionnumerique,transitiondemographique,classification,romeparent),riasecmajeur)" + ] + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 6GJu5O_j_Jt6kzMSnibff6Zks9s" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des thèmes.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Theme" + } + }, + "examples": { + "Retour complet": { + "value": [ + { + "libelle": "Métiers auprès des enfants", + "code": "12", + "definition": "Métiers liés à l'éducation, l'enseignement, l'animation, aux loisirs et aux soins des enfants ", + "metiers": [ + { + "label": "A1201", + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "libelle": "Bûcheronnage et élagage", + "codeIsco": "6210", + "code": "A1201", + "riasecMineur": "R", + "transitionEcologique": false, + "transitionNumerique": false, + "appellations": [ + { + "emploiReglemente": false, + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "libelle": "Chef / Cheffe de station fruitière", + "secondaire": false, + "code": "12374", + "emploiCadre": false, + "transitionEcologique": false, + "transitionNumerique": false, + "transitionDemographique": false, + "classification": "PRINCIPALE", + "romeParent": "12374" + } + ], + "riasecMajeur": "R" + } + ] + } + ] + }, + "Retour par défaut": { + "value": [ + { + "libelle": "Métiers auprès des enfants", + "code": "12" + } + ] + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-metiers" + } + ] + } + }, + "/v1/metiers/theme/{code}": { + "get": { + "tags": [ + "Thème" + ], + "summary": "Lire un thème", + "description": "Permet de lire un thème depuis son code.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "lireTheme", + "parameters": [ + { + "name": "code", + "in": "path", + "description": "Code du thème.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "example": "libelle,obsolete,code,definition,datefin", + "enum": [ + "code", + "datefin", + "definition", + "libelle", + "metiers(emploireglemente,libelle,code,emploicadre,riasecmineur,transitionnumerique,riasecmajeur,label,transitionecologiquedetaillee,codeisco,transitionecologique,transitiondemographique,appellations(emploireglemente,transitionecologiquedetaillee,libelle,secondaire,code,emploicadre,transitionecologique,transitionnumerique,transitiondemographique,classification,romeparent))", + "obsolete" + ] + } + }, + { + "name": "date", + "in": "query", + "description": "Date de la recherche au format yyyy-MM-dd ou yyyyMMdd.", + "required": false, + "schema": { + "type": "string", + "format": "date", + "example": "2022-05-28" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 6GJu5O_j_Jt6kzMSnibff6Zks9s" + } + } + ], + "responses": { + "200": { + "description": "Retourne les données d'un thème.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Theme" + }, + "examples": { + "Retour complet": { + "value": { + "libelle": "Métiers auprès des enfants", + "obsolete": false, + "code": "12", + "definition": "Métiers liés à l'éducation, l'enseignement, l'animation, aux loisirs et aux soins des enfants ", + "metiers": [ + { + "emploiReglemente": false, + "libelle": "Bûcheronnage et élagage", + "code": "A1201", + "emploiCadre": false, + "riasecMineur": "R", + "transitionNumerique": false, + "riasecMajeur": "R", + "label": "A1201", + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "codeIsco": "6210", + "transitionEcologique": false, + "transitionDemographique": false, + "appellations": [ + { + "emploiReglemente": false, + "transitionEcologiqueDetaillee": "EMPLOI_STRATEGIQUE", + "libelle": "Chef / Cheffe de station fruitière", + "secondaire": false, + "code": "12374", + "emploiCadre": false, + "transitionEcologique": false, + "transitionNumerique": false, + "transitionDemographique": false, + "classification": "PRINCIPALE", + "romeParent": "12374" + } + ] + } + ], + "dateFin": "2024-02-23T14:40:14.848Z" + } + }, + "Retour par défaut": { + "value": { + "libelle": "Métiers auprès des enfants", + "obsolete": false, + "code": "12", + "definition": "Métiers liés à l'éducation, l'enseignement, l'animation, aux loisirs et aux soins des enfants ", + "dateFin": "2024-02-23T14:40:14.848Z" + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "service": "/v1/mon_uri", + "message": "Code inexistant: monCode", + "code": 404 + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-metiers" + } + ] + } + }, + "/v1/metiers/version": { + "get": { + "tags": [ + "Versionning du ROME" + ], + "summary": "Récupérer la version actuelle du ROME", + "description": "Récupère la version actuelle du ROME.", + "operationId": "lireVersion", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "version", + "lastModifiedDate", + "version,lastModifiedDate" + ], + "example": "version,lastModifiedDate" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 6GJu5O_j_Jt6kzMSnibff6Zks9s" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VersionRome" + }, + "examples": { + "Retour complet": { + "value": { + "version": "19", + "lastModifiedDate": "2025-05-22T12:04:43.281Z" + } + }, + "Retour par défaut": { + "value": { + "version": "19", + "lastModifiedDate": "2025-05-22T12:04:43.281Z" + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-metiers", + "description": "PROD" + } + ] + } + } + }, + "components": { + "schemas": { + "Appellation": { + "type": "object", + "properties": { + "appellationEsco": { + "$ref": "#/components/schemas/AppellationEsco" + }, + "appellationsEnvisageables": { + "type": "array", + "description": "Liste des appellations envisageable. Cette mobilité est obsolète mais conservée pour compatibilité ascendante.", + "deprecated": true, + "items": { + "$ref": "#/components/schemas/Appellation" + } + }, + "appellationsProches": { + "type": "array", + "description": "Liste des appellations proches. Cette mobilité est obsolète mais conservée pour compatibilité ascendante.", + "deprecated": true, + "items": { + "$ref": "#/components/schemas/Appellation" + } + }, + "classification": { + "type": "string", + "description": "Classification.", + "enum": [ + "PRINCIPALE", + "SYNONYME" + ] + }, + "code": { + "type": "string", + "description": "Code unique de l'appellation.", + "example": "12374" + }, + "competencesCles": { + "type": "array", + "description": "Liste des Compétences clés rattachées.", + "items": { + "$ref": "#/components/schemas/CompetenceCle" + } + }, + "dateFin": { + "type": "string", + "description": "date de fin de validité (renseignée si l'entité est obsolete)", + "format": "date-time" + }, + "emploiCadre": { + "type": "boolean", + "description": "Emploi cadre: oui/non. Ce champ est optionnel." + }, + "emploiReglemente": { + "type": "boolean", + "description": "Emploi règlementé: oui/non. Ce champ est optionnel." + }, + "libelle": { + "type": "string", + "description": "Libellé de l'appellation.", + "example": "Chef / Cheffe de station fruitière" + }, + "libelleCourt": { + "type": "string", + "description": "Libellé court de l'appellation. Ce champ est optionnel.", + "example": "Chef de station fruitière" + }, + "metier": { + "$ref": "#/components/schemas/Metier" + }, + "metiersEnvisageables": { + "type": "array", + "description": "Liste des métiers envisageables. Cette mobilité est obsolète mais conservée pour compatibilité ascendante.", + "deprecated": true, + "items": { + "$ref": "#/components/schemas/Metier" + } + }, + "metiersProches": { + "type": "array", + "description": "Liste des métiers proches. Cette mobilité est obsolète mais conservée pour compatibilité ascendante.", + "deprecated": true, + "items": { + "$ref": "#/components/schemas/Metier" + } + }, + "obsolete": { + "type": "boolean", + "description": "boolean définissant si l'entité est obsolete" + }, + "romeParent": { + "type": "string", + "description": "Code rome du métier parent.", + "example": "12374" + }, + "secondaire": { + "type": "boolean", + "description": "Appellation secondaire: oui/non. Ce champ est optionnel." + }, + "transitionDemographique": { + "type": "boolean", + "description": "Transition démographique: oui/non. Ce champ est optionnel." + }, + "transitionEcologique": { + "type": "boolean", + "description": "Transition écologique: oui/non. Ce champ est optionnel." + }, + "transitionEcologiqueDetaillee": { + "type": "string", + "description": "Transition écologique détaillée. Ce champ est optionnel.", + "enum": [ + "EMPLOI_STRATEGIQUE", + "EMPLOI_VERT", + "EMPLOI_BLANC", + "EMPLOI_BRUN" + ] + }, + "transitionNumerique": { + "type": "boolean", + "description": "Transition numérique: oui/non. Ce champ est optionnel." + } + }, + "description": "Appellation" + }, + "AppellationEsco": { + "type": "object", + "properties": { + "libelle": { + "type": "string", + "description": "Libellé de l'appellation ESCO." + }, + "uri": { + "type": "string", + "description": "Uri unique de l'appellation ESCO." + } + }, + "description": "Appellation ESCO (en provenance du référentiel 'ESCO')" + }, + "CentreInteret": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code unique du centre d'intérêt.", + "example": "25" + }, + "dateFin": { + "type": "string", + "description": "date de fin de validité (renseignée si l'entité est obsolete)", + "format": "date-time" + }, + "definition": { + "type": "string", + "description": "Définition du centre d'intérêt. Ce champs est optionnel." + }, + "libelle": { + "type": "string", + "description": "Libellé du centre d'intérêts.", + "example": "Je suis amateur / amatrice de sensations fortes" + }, + "metiers": { + "type": "array", + "description": "Liste des métiers liés. Cet attribut est déprécié, utiliser l'attribut metiersLies", + "deprecated": true, + "items": { + "$ref": "#/components/schemas/Metier" + } + }, + "metiersLies": { + "type": "array", + "description": "Liste des métiers liés.", + "items": { + "$ref": "#/components/schemas/LiaisonEntreMetierEtCentreInteret" + } + }, + "obsolete": { + "type": "boolean", + "description": "boolean définissant si l'entité est obsolete" + } + }, + "description": "Centre d'intérêts" + }, + "Competence": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code unique de la compétence.", + "example": "100007" + }, + "codeOgr": { + "type": "string", + "description": "Code OGR. Cet attribut est déprécié et n'est plus présent que pour des raisons de rétro-compatibilités", + "deprecated": true + }, + "libelle": { + "type": "string", + "description": "Libellé de la compétence.", + "example": "Techniques de soudage" + }, + "type": { + "type": "string", + "description": "Le type de l'objet. Il y a quatre valeurs possibles :\n\n" + } + }, + "description": "Compétence (en provenance du référentiel 'Compétences'). Cette entité se décompose en quatre catégories : les macro-savoir-faires, les macro-savoir-êtres professionnels, les compétences détaillées et enfin les savoirs.", + "discriminator": { + "propertyName": "type" + } + }, + "CompetenceCle": { + "type": "object", + "properties": { + "competence": { + "oneOf": [ + { + "$ref": "#/components/schemas/CompetenceDetaillee" + }, + { + "$ref": "#/components/schemas/MacroSavoirEtreProfessionnel" + }, + { + "$ref": "#/components/schemas/MacroSavoirFaire" + }, + { + "$ref": "#/components/schemas/Savoir" + } + ] + }, + "frequence": { + "type": "integer", + "description": "Fréquence (entre 0 inclus et 100 inclus).", + "format": "int32" + } + }, + "description": "Compétence clé" + }, + "CompetenceDetaillee": { + "type": "object", + "description": "Compétence détaillée (en provenance du référentiel 'Compétences').", + "allOf": [ + { + "$ref": "#/components/schemas/Competence" + }, + { + "type": "object", + "properties": { + "riasecMajeur": { + "type": "string", + "description": "Riasec Majeur. Ce champ est optionnel.", + "enum": [ + "R", + "I", + "A", + "S", + "E", + "C" + ] + }, + "riasecMineur": { + "type": "string", + "description": "Riasec Mineur. Ce champ est optionnel.", + "enum": [ + "R", + "I", + "A", + "S", + "E", + "C" + ] + }, + "type": { + "type": "string", + "description": "Cette propriété est forcément à la valeur 'COMPETENCE-DETAILLEE'." + } + } + } + ] + }, + "ContexteTravail": { + "type": "object", + "properties": { + "categorie": { + "type": "string", + "description": "Catégorie de contexte de travail.", + "enum": [ + "CONDITIONS_TRAVAIL", + "TYPE_BENEFICIAIRE", + "LIEU_ET_DEPLACEMENT", + "HORAIRE_ET_DUREE_TRAVAIL", + "TYPE_STRUCTURE_ACCUEIL", + "STATUT_EMPLOI" + ] + }, + "code": { + "type": "string", + "description": "Code unique du contexte de travail.", + "example": "403091" + }, + "libelle": { + "type": "string", + "description": "Libellé du contexte de travail.", + "example": "En club sportif" + } + }, + "description": "Contexte de travail (en provenance du référentiel 'Situations de travail')" + }, + "DivisionNaf": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code unique de la division NAF.", + "example": "24" + }, + "libelle": { + "type": "string", + "description": "Libellé de la division NAF.", + "example": "Métallurgie" + } + }, + "description": "Division NAF (en provenance du référentiel 'NAF')" + }, + "DomaineProfessionnel": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code unique du domaine professionnel.", + "example": "A14" + }, + "dateFin": { + "type": "string", + "description": "date de fin de validité (renseignée si l'entité est obsolete)", + "format": "date-time" + }, + "grandDomaine": { + "$ref": "#/components/schemas/GrandDomaine" + }, + "libelle": { + "type": "string", + "description": "Libellé du domaine professionnel.", + "example": "Production" + }, + "metiers": { + "type": "array", + "description": "Liste des métiers rattachés.", + "items": { + "$ref": "#/components/schemas/Metier" + } + }, + "obsolete": { + "type": "boolean", + "description": "boolean définissant si l'entité est obsolete" + } + }, + "description": "Domaine professionnel" + }, + "Formacode": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code unique du formacode V13.", + "example": "21317" + }, + "libelle": { + "type": "string", + "description": "Libellé du formacode.", + "example": "culture algue" + } + }, + "description": "Formacode (en provenance du référentiel 'FORMACODES V13')" + }, + "GrandDomaine": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code unique du grand domaine.", + "example": "H" + }, + "dateFin": { + "type": "string", + "description": "date de fin de validité (renseignée si l'entité est obsolete)", + "format": "date-time" + }, + "domaineProfessionnels": { + "type": "array", + "description": "Liste des domaines professionnels rattachés.", + "items": { + "$ref": "#/components/schemas/DomaineProfessionnel" + } + }, + "libelle": { + "type": "string", + "description": "Libellé du grand domaine.", + "example": "Industrie" + }, + "obsolete": { + "type": "boolean", + "description": "boolean définissant si l'entité est obsolete" + } + }, + "description": "Grand Domaine" + }, + "LiaisonEntreMetierEtCentreInteret": { + "type": "object", + "properties": { + "centreInteret": { + "$ref": "#/components/schemas/CentreInteret" + }, + "metier": { + "$ref": "#/components/schemas/Metier" + }, + "principal": { + "type": "boolean", + "description": "Principal: oui/non." + } + }, + "description": "Liaison entre un métier et un centre d'intérêt" + }, + "LiaisonEntreMetierEtSecteurActivite": { + "type": "object", + "properties": { + "metier": { + "$ref": "#/components/schemas/Metier" + }, + "principal": { + "type": "boolean", + "description": "Principal: oui/non." + }, + "secteurActivite": { + "$ref": "#/components/schemas/SecteurActivite" + } + }, + "description": "Liaison entre un métier et un secteur d'activité" + }, + "MacroSavoirEtreProfessionnel": { + "type": "object", + "description": "Macro savoir-être professionnel (en provenance du référentiel 'Compétences').", + "allOf": [ + { + "$ref": "#/components/schemas/Competence" + }, + { + "type": "object", + "properties": { + "riasecMajeur": { + "type": "string", + "description": "Riasec Majeur. Ce champ est optionnel.", + "enum": [ + "R", + "I", + "A", + "S", + "E", + "C" + ] + }, + "riasecMineur": { + "type": "string", + "description": "Riasec Mineur. Ce champ est optionnel.", + "enum": [ + "R", + "I", + "A", + "S", + "E", + "C" + ] + }, + "type": { + "type": "string", + "description": "Cette propriété est forcément à la valeur 'MACRO-SAVOIR-ETRE-PROFESSIONNEL'." + } + } + } + ] + }, + "MacroSavoirFaire": { + "type": "object", + "description": "Macro savoir-faire (en provenance du référentiel 'Compétences').", + "allOf": [ + { + "$ref": "#/components/schemas/Competence" + }, + { + "type": "object", + "properties": { + "riasecMajeur": { + "type": "string", + "description": "Riasec Majeur. Ce champ est optionnel.", + "enum": [ + "R", + "I", + "A", + "S", + "E", + "C" + ] + }, + "riasecMineur": { + "type": "string", + "description": "Riasec Mineur. Ce champ est optionnel.", + "enum": [ + "R", + "I", + "A", + "S", + "E", + "C" + ] + }, + "type": { + "type": "string", + "description": "Cette propriété est forcément à la valeur 'MACRO-SAVOIR-FAIRE'." + } + } + } + ] + }, + "Metier": { + "type": "object", + "properties": { + "accesEmploi": { + "type": "string", + "description": "Acces emploi.", + "example": "Ce métier est accessible avec un CAP/BEP Agricole en travaux forestiers et bûcheronnage." + }, + "appellations": { + "type": "array", + "description": "Liste des appellations rattachées.", + "items": { + "$ref": "#/components/schemas/Appellation" + } + }, + "appellationsEnvisageables": { + "type": "array", + "description": "Liste des appellations envisageable. Cette mobilité est obsolète mais conservée pour compatibilité ascendante.", + "deprecated": true, + "items": { + "$ref": "#/components/schemas/Appellation" + } + }, + "appellationsProches": { + "type": "array", + "description": "Liste des appellations proches. Cette mobilité est obsolète mais conservée pour compatibilité ascendante.", + "deprecated": true, + "items": { + "$ref": "#/components/schemas/Appellation" + } + }, + "centresInterets": { + "type": "array", + "description": "Liste des centres d'intérêts liés. Cet attribut est déprécié, utiliser l'attribut centresInteretsLies", + "deprecated": true, + "items": { + "$ref": "#/components/schemas/CentreInteret" + } + }, + "centresInteretsLies": { + "type": "array", + "description": "Liste des centres d'intérêts liés.", + "items": { + "$ref": "#/components/schemas/LiaisonEntreMetierEtCentreInteret" + } + }, + "code": { + "type": "string", + "description": "Code unique du métier.", + "example": "A1201" + }, + "codeIsco": { + "type": "string", + "description": "Code ISCO (International Standard Classification of Occupations ou CITP en français). Ce champ est optionnel.", + "example": "6210" + }, + "competencesMobilisees": { + "type": "array", + "description": "Liste des compétences mobilisées ni principales ni emergentes.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CompetenceDetaillee" + }, + { + "$ref": "#/components/schemas/MacroSavoirEtreProfessionnel" + }, + { + "$ref": "#/components/schemas/MacroSavoirFaire" + }, + { + "$ref": "#/components/schemas/Savoir" + } + ] + } + }, + "competencesMobiliseesEmergentes": { + "type": "array", + "description": "Liste des compétences mobilisées.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CompetenceDetaillee" + }, + { + "$ref": "#/components/schemas/MacroSavoirEtreProfessionnel" + }, + { + "$ref": "#/components/schemas/MacroSavoirFaire" + }, + { + "$ref": "#/components/schemas/Savoir" + } + ] + } + }, + "competencesMobiliseesPrincipales": { + "type": "array", + "description": "Liste des compétences mobilisées.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CompetenceDetaillee" + }, + { + "$ref": "#/components/schemas/MacroSavoirEtreProfessionnel" + }, + { + "$ref": "#/components/schemas/MacroSavoirFaire" + }, + { + "$ref": "#/components/schemas/Savoir" + } + ] + } + }, + "contextesTravail": { + "type": "array", + "description": "Liste des contextes de travail liés.", + "items": { + "$ref": "#/components/schemas/ContexteTravail" + } + }, + "dateFin": { + "type": "string", + "description": "date de fin de validité (renseignée si l'entité est obsolete)", + "format": "date-time" + }, + "definition": { + "type": "string", + "description": "Définition.", + "example": "Réalise des opérations de coupe et d'entretien d'arbres" + }, + "divisionsNaf": { + "type": "array", + "description": "Liste des divisions NAF liées.", + "items": { + "$ref": "#/components/schemas/DivisionNaf" + } + }, + "domaineProfessionnel": { + "$ref": "#/components/schemas/DomaineProfessionnel" + }, + "emploiCadre": { + "type": "boolean", + "description": "Emploi cadre: oui/non. Ce champ est optionnel." + }, + "emploiReglemente": { + "type": "boolean", + "description": "Emploi réglementé: oui/non. Ce champ est optionnel." + }, + "formacodes": { + "type": "array", + "description": "Liste des formacodes liés.", + "items": { + "$ref": "#/components/schemas/Formacode" + } + }, + "label": { + "type": "string", + "description": "Label (code métier d'origine). Cette valeur est utilisée dans le cas où un métier a été divisé en plusieurs métiers. Ce champ est optionnel.", + "example": "A1201" + }, + "libelle": { + "type": "string", + "description": "Libellé du métier.", + "example": "Bûcheronnage et élagage" + }, + "metiersEnProximite": { + "type": "array", + "description": "Liste des métiers en proximité.", + "items": { + "$ref": "#/components/schemas/Metier" + } + }, + "metiersEnvisageables": { + "type": "array", + "description": "Liste des métiers envisageables. Cette mobilité est obsolète mais conservée pour compatibilité ascendante.", + "deprecated": true, + "items": { + "$ref": "#/components/schemas/Metier" + } + }, + "metiersProches": { + "type": "array", + "description": "Liste des métiers proches. Cette mobilité est obsolète mais conservée pour compatibilité ascendante.", + "deprecated": true, + "items": { + "$ref": "#/components/schemas/Metier" + } + }, + "obsolete": { + "type": "boolean", + "description": "boolean définissant si l'entité est obsolete" + }, + "riasecMajeur": { + "type": "string", + "description": "Riasec Majeur. Ce champ est optionnel.", + "enum": [ + "R", + "I", + "A", + "S", + "E", + "C" + ] + }, + "riasecMineur": { + "type": "string", + "description": "Riasec Mineur. Ce champ est optionnel.", + "enum": [ + "R", + "I", + "A", + "S", + "E", + "C" + ] + }, + "secteursActivites": { + "type": "array", + "description": "Liste des secteurs d'activites liés. Cet attribut est déprécié, utiliser l'attribut secteursActivitesLies", + "deprecated": true, + "items": { + "$ref": "#/components/schemas/SecteurActivite" + } + }, + "secteursActivitesLies": { + "type": "array", + "description": "Liste des centres d'intérêts liés.", + "items": { + "$ref": "#/components/schemas/LiaisonEntreMetierEtSecteurActivite" + } + }, + "themes": { + "type": "array", + "description": "Liste des thèmes liés.", + "items": { + "$ref": "#/components/schemas/Theme" + } + }, + "transitionDemographique": { + "type": "boolean", + "description": "Transition démographique: oui/non. Ce champ est optionnel." + }, + "transitionEcologique": { + "type": "boolean", + "description": "Transition écologique: oui/non. Ce champ est optionnel." + }, + "transitionEcologiqueDetaillee": { + "type": "string", + "description": "Transition écologique détaillée. Ce champ est optionnel.", + "enum": [ + "EMPLOI_STRATEGIQUE", + "EMPLOI_VERT", + "EMPLOI_BLANC", + "EMPLOI_BRUN" + ] + }, + "transitionNumerique": { + "type": "boolean", + "description": "Transition numérique: oui/non. Ce champ est optionnel." + } + }, + "description": "Métier" + }, + "Savoir": { + "type": "object", + "description": "Savoir (en provenance du référentiel 'Compétences').", + "allOf": [ + { + "$ref": "#/components/schemas/Competence" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Cette propriété est forcément à la valeur 'SAVOIR'." + } + } + } + ] + }, + "SecteurActivite": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code unique du secteur d'activité.", + "example": "79" + }, + "dateFin": { + "type": "string", + "description": "date de fin de validité (renseignée si l'entité est obsolete)", + "format": "date-time" + }, + "definition": { + "type": "string", + "description": "Définition du secteur d'activité. Ce champ est optionnel." + }, + "libelle": { + "type": "string", + "description": "Libellé du secteur d'activité.", + "example": "Agriculture et élevage" + }, + "metiersLies": { + "type": "array", + "description": "Liste des métiers liés.", + "items": { + "$ref": "#/components/schemas/LiaisonEntreMetierEtSecteurActivite" + } + }, + "obsolete": { + "type": "boolean", + "description": "boolean définissant si l'entité est obsolete" + }, + "secteurActivite": { + "$ref": "#/components/schemas/SecteurActivite" + }, + "sousSecteurs": { + "type": "array", + "description": "Sous-secteur d'activités rattachés.", + "items": { + "$ref": "#/components/schemas/SecteurActivite" + } + } + }, + "description": "Secteur d'activités. Il y a seulement deux niveaux de secteur d'activités: l'un qui dispose de sous-secteurs d'activités et l'autre qui dispose d'un secteur d'activité parent et de métiers rattachés." + }, + "Theme": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code unique du thème.", + "example": "12" + }, + "dateFin": { + "type": "string", + "description": "date de fin de validité (renseignée si l'entité est obsolete)", + "format": "date-time" + }, + "definition": { + "type": "string", + "description": "Définition du thème. Ce champs est optionnel.", + "example": "Métiers liés à l'éducation, l'enseignement, l'animation, aux loisirs et aux soins des enfants " + }, + "libelle": { + "type": "string", + "description": "Libellé du thème.", + "example": "Métiers auprès des enfants" + }, + "metiers": { + "type": "array", + "description": "Métiers rattachés.", + "items": { + "$ref": "#/components/schemas/Metier" + } + }, + "obsolete": { + "type": "boolean", + "description": "boolean définissant si l'entité est obsolete" + } + }, + "description": "Thème" + }, + "VersionRome": { + "title": "VersionRome", + "type": "object", + "properties": { + "version": { + "type": "string", + "description": "La version actuelle." + }, + "lastModifiedDate": { + "type": "string", + "description": "La date de dernière modification de la version.", + "format": "date-time" + } + }, + "description": "Version du rome" + } + } + } +} \ No newline at end of file diff --git a/backend/api/rome_4_situations_de_travail.json b/backend/api/rome_4_situations_de_travail.json new file mode 100644 index 0000000..a7c2aba --- /dev/null +++ b/backend/api/rome_4_situations_de_travail.json @@ -0,0 +1,358 @@ +{ + "openapi": "3.0.1", + "info": { + "version": "1", + "title": "ROME V4.0 - Situations de travail", + "description": " Référentiel des environnements dans lequel une personne exerce son travail.
Le contexte de travail englobe les différents éléments physiques, organisationnels et sociaux qui influencent les tâches, les activités et les interactions professionnelles. Il permet de mieux caractériser l’emploi à pourvoir (avantages et contraintes du poste proposé) et réduire les « échecs » de recrutement liés aux conditions de travail.
Le référentiel des contextes de travail se décline en 6 rubriques : Conditions de travail et risques professionnels, Horaires et durées de travail, Lieux et déplacements, Statut d'emploi, Publics spécifiques et Types de structure d’accueil. \r\n\r\n**Scopes** : `api_rome-contextes-travailv1`,`nomenclatureRome`\r\n\r\n**Royaume** : `/partenaire`" + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-contextes-travail" + } + ], + "paths": { + "/v1/situations-travail/contexte-travail": { + "get": { + "tags": [ + "Contexte de travail" + ], + "summary": "Lister les contextes de travail", + "description": "Permet de lister les contextes de travail.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "listerContextesTravail", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "categorie", + "code", + "libelle" + ], + "example": "libelle,code,categorie" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 72xlz9Ri8sUL-EK2Bkbr5Uqk498" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des contextes de travail.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContexteTravail" + } + }, + "examples": { + "Retour complet": { + "value": [ + { + "libelle": "En club sportif", + "code": "403091", + "categorie": "CONDITIONS_TRAVAIL" + } + ] + }, + "Retour par défaut": { + "value": [ + { + "libelle": "En club sportif", + "code": "403091", + "categorie": "CONDITIONS_TRAVAIL" + } + ] + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect.", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-contextes-travail", + "description": "PROD" + } + ] + } + }, + "/v1/situations-travail/contexte-travail/{code}": { + "get": { + "tags": [ + "Contexte de travail" + ], + "summary": "Lire un contexte de travail", + "description": "Permet de lire un contexte de travail depuis son code.\r\n\r\nSi vous renseignez une ou plusieurs valeurs dans \"champs\", alors vous obtiendrez le résultat pour ces champs.\r\n\r\nSi vous ne renseignez aucune valeur dans \"champs\", alors vous obtiendrez le résultat par défaut. (Sélectionner l'exemple \"***Par défaut***\" pour voir les données retournées)", + "operationId": "lireContexteTravail", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "categorie", + "code", + "libelle" + ], + "example": "libelle,code,categorie" + } + }, + { + "name": "code", + "in": "path", + "description": "Code du contexte de travail.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 72xlz9Ri8sUL-EK2Bkbr5Uqk498" + } + } + ], + "responses": { + "200": { + "description": "Retourne les données pour un contexte de travail renseigné.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContexteTravail" + }, + "examples": { + "Retour complet": { + "value": { + "libelle": "En club sportif", + "code": "403091", + "categorie": "CONDITIONS_TRAVAIL" + } + }, + "Retour par défaut": { + "value": { + "libelle": "En club sportif", + "code": "403091", + "categorie": "CONDITIONS_TRAVAIL" + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect.", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + }, + "404": { + "description": "Not found.", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "service": "/v1/mon_uri", + "message": "Code inexistant: monCode", + "code": 404 + } + } + } + } + } + } + }, + "security": [], + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-contextes-travail", + "description": "PROD" + } + ] + } + }, + "/v1/situations-travail/version": { + "get": { + "tags": [ + "Versionning du ROME" + ], + "summary": "Récupérer la version actuelle du ROME", + "description": "Récupère la version actuelle du ROME.", + "operationId": "lireVersion", + "parameters": [ + { + "name": "champs", + "in": "query", + "description": "Sélecteur de champs : il est possible de paramétrer le retour de la requête en définissant les champs souhaités (liste exhaustive des champs possibles : `Allowed values`).
Vous pouvez vous aider des exemples de réponse pour identifier les champs que vous voulez récupérer.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "version", + "lastModifiedDate", + "version,lastModifiedDate" + ], + "example": "version,lastModifiedDate" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer 72xlz9Ri8sUL-EK2Bkbr5Uqk498" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VersionRome" + }, + "examples": { + "Retour complet": { + "value": { + "version": "19", + "lastModifiedDate": "2025-05-22T12:04:43.281Z" + } + }, + "Retour par défaut": { + "value": { + "version": "19", + "lastModifiedDate": "2025-05-22T12:04:43.281Z" + } + } + } + } + } + }, + "400": { + "description": "Bad request : peut-être causé par un sélecteur de champs incorrect", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "message": "L'attribut 'monAttribut' n'est pas selectionnable", + "codeMetier": "SELECTOR", + "service": "/v1/mon_uri", + "code": 400 + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/rome-contextes-travail", + "description": "PROD" + } + ] + } + } + }, + "components": { + "schemas": { + "ContexteTravail": { + "type": "object", + "description": "Contexte de travail", + "properties": { + "categorie": { + "type": "string", + "enum": [ + "CONDITIONS_TRAVAIL", + "TYPE_BENEFICIAIRE", + "LIEU_ET_DEPLACEMENT", + "HORAIRE_ET_DUREE_TRAVAIL", + "TYPE_STRUCTURE_ACCUEIL", + "STATUT_EMPLOI" + ], + "description": "Catégorie de contexte de travail.", + "example": "CONDITIONS_TRAVAIL" + }, + "code": { + "type": "string", + "description": "Code unique du contexte de travail.", + "example": "403091" + }, + "libelle": { + "type": "string", + "description": "Libellé du contexte de travail.", + "example": "En club sportif" + } + } + }, + "VersionRome": { + "title": "VersionRome", + "type": "object", + "properties": { + "version": { + "type": "string", + "description": "La version actuelle.", + "example": "19" + }, + "lastModifiedDate": { + "type": "string", + "description": "La date de dernière modification de la version.", + "format": "date-time" + } + }, + "description": "Version du rome" + } + } + } +} \ No newline at end of file diff --git a/backend/api/romeo_v2.json b/backend/api/romeo_v2.json new file mode 100644 index 0000000..559fca1 --- /dev/null +++ b/backend/api/romeo_v2.json @@ -0,0 +1,811 @@ +{ + "openapi": "3.0.3", + "info": { + "version": "2.0", + "title": "Romeo", + "description": "Utilisez l’IA afin de vous aider à rapprocher un texte libre à une appellation ou à un savoir / savoir-faire du Répertoire Opérationnel des Métiers et des Emplois (ROME).\r\n\r\n***Scope :*** `api_romeov2`\r\n\r\n***Royaume :*** `/partenaire`" + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/romeo/v2", + "description": "PROD" + } + ], + "paths": { + "/performancePredictionCompetences": { + "post": { + "tags": [ + "Competence" + ], + "summary": "Renvoyez-nous votre feedback pour permettre l'amélioration du modèle IA", + "description": "Cette ressource vous permet de nous envoyer votre feedback par rapport à la prédiction faite par l'IA. Cette information est importante pour mesurer la performance du modèle IA, pour améliorer la qualité des prédictions et délivrer un service de qualité.", + "operationId": "Renvoyez-nous votre feedback pour permettre l'amélioration du modèle IA", + "requestBody": { + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/PerformanceCompetenceDTO" + }, + "examples": { + "Example 1": { + "value": { + "performanceCompetence": [ + { + "uuidInference": "b42110bb-3d55-4e92-9930-133c5d92a555", + "bonnePrediction": true, + "codeCompetence": "101846" + } + ], + "optionsSupervision": { + "nomAppelant": "francetravail" + } + } + } + } + } + } + }, + "responses": { + "200": { + "description": "En cas de succès à l'appel API, cette dernière renvoie un code http : 200 OK ", + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/ExceptionPerformanceCompetence" + }, + "examples": { + "Example 1": { + "value": { + "uuidInference": "b42110bb-3d55-4e92-9930-133c5d92a555" + } + } + } + } + } + }, + "400": { + "description": "En cas de réponse 400, veuillez vous référer à l'erreur mentionnée dans l'objet message.", + "content": { + "application/json": { + "schema": { + "type": "object" + }, + "examples": { + "Example 1": { + "value": { + "classeOrigine": "fr.pe.empl.service.so072.exceptions.RomeoBadRequestException", + "codeErreur": "J072000G", + "codeHttp": 400, + "message": "Le champ optionsSupervision.nomAppelant est obligatoire" + } + } + } + } + } + }, + "500": { + "description": "Erreur serveur." + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/romeo/v2", + "description": "" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer SR-QkBNyazIvwyry39FxlZ7BMw4" + } + } + ] + } + }, + "/performancePredictionMetiers": { + "post": { + "tags": [ + "Appellation" + ], + "summary": "Renvoyez-nous votre feedback pour permettre l'amélioration du modèle IA", + "description": "Cette ressource vous permet de nous envoyer votre feedback par rapport à la prédiction faite par l'IA. Cette information est importante pour mesurer la performance du modèle IA, pour améliorer la qualité des prédictions et délivrer un service de qualité.", + "operationId": "Renvoyez-nous votre feedback pour permettre l amélioration du modèle IA", + "requestBody": { + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/PerformanceAppellationDTO" + }, + "examples": { + "Example 1": { + "value": { + "performanceAppellation": [ + { + "uuidInference": "93f7f573-da71-4382-94c7-e21db9c9a30f", + "bonnePrediction": true, + "codeAppellation": "11564" + } + ], + "optionsSupervision": { + "nomAppelant": "francetravail" + } + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/ExceptionPerformanceAppellation" + }, + "examples": { + "Example 1": { + "value": { + "uuidInference": "b42110bb-3d55-4e92-9930-133c5d92a555" + } + } + } + } + } + }, + "400": { + "description": "En cas de réponse 400, veuillez vous référer à l'erreur mentionnée dans l'objet message.", + "content": { + "application/json": { + "schema": { + "type": "object" + }, + "examples": { + "Example 1": { + "value": { + "classeOrigine": "fr.pe.empl.service.so072.exceptions.RomeoBadRequestException", + "codeErreur": "J072000G", + "codeHttp": 400, + "message": "Le champ optionsSupervision.nomAppelant est obligatoire" + } + } + } + } + } + }, + "500": { + "description": "Erreur serveur." + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/romeo/v2", + "description": "" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer SR-QkBNyazIvwyry39FxlZ7BMw4" + } + } + ] + } + }, + "/predictionCompetences": { + "post": { + "tags": [ + "Competence" + ], + "summary": "Prédiction des savoirs / savoir-faire du ROME", + "description": "Obtenez le savoir / savoir-faire du ROME le plus proche à partir d’un texte libre renseigné.\r\n\r\n\r\n\r\nCas d'usage possibles :\r\n\r\n- Rapprocher une compétence d’un CV à des savoirs / savoir-faire du ROME 4.0\r\n\r\n- Rapprocher une compétence d’un référentiel extérieure à des savoirs / savoir-faire du ROME 4.0\r\n\r\n\r\n\r\nLes bonnes pratiques pour utiliser /PredictionCompetences\r\n\r\nSi votre texte contient plusieurs compétences libres, /PredictionCompetences ne pourra pas les séparer pour ensuite les associer au ROME de façon individuelle. Il est préférable de fournir un texte contenant une seule compétence libre.\r\n\r\nUtiliser /performancePredictionCompetences pour nous aider à améliorer notre modèle IA (cf. ressource ci-dessous : /performancePredictionCompetences - Renvoyez-nous votre feedback pour permettre l'amélioration du modèle IA).", + "operationId": "Prédiction des savoirs / savoir-faire du ROME", + "requestBody": { + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/CompetenceDTO" + }, + "examples": { + "Example 1": { + "value": { + "competences": [ + { + "intitule": "faire du pain", + "identifiant": "123456" + } + ], + "options": { + "nomAppelant": "francetravail", + "nbResultats": 2, + "seuilScorePrediction": 0.7 + } + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json; charset=utf-8": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PredictionCompetence" + } + }, + "examples": { + "Example 1": { + "value": [ + { + "uuidInference": "93f7f573-da71-4382-94c7-e21db9c9a30f", + "identifiant": "123456", + "intitule": "faire du pain", + "competencesRome": [ + { + "libelleCompetence": "Fabriquer des produits de boulangerie", + "codeCompetence": "119357", + "typeCompetence": "COMPETENCE-DETAILLEE", + "scorePrediction": 0.8 + } + ] + } + ] + } + } + } + } + }, + "400": { + "description": "En cas de réponse 400, veuillez vous référer à l'erreur mentionnée dans l'objet message.", + "content": { + "application/json": { + "schema": { + "type": "object" + }, + "examples": { + "Example 1": { + "value": { + "classeOrigine": "fr.pe.empl.service.so072.exceptions.RomeoBadRequestException", + "codeErreur": "J072000G", + "codeHttp": 400, + "message": "Le champ optionsSupervision.nomAppelant est obligatoire" + } + } + } + } + } + }, + "500": { + "description": "Erreur serveur." + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/romeo/v2", + "description": "" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer SR-QkBNyazIvwyry39FxlZ7BMw4" + } + } + ] + } + }, + "/predictionMetiers": { + "post": { + "tags": [ + "Appellation" + ], + "summary": "Prédiction des appellations métier du ROME", + "description": "Obtenez l‘appellation métier du ROME la plus proche à partir d’un texte libre renseigné.\r\n\r\n\r\n\r\nCas d'usage possibles\r\n- Rapprocher un intitulé d’offre d’emploi à des appellations métier du ROME 4.0\r\n- Rapprocher un intitulé d’expérience d’un CV à des appellations métier du ROME 4.0\r\n\r\nLes bonnes pratiques pour utiliser /predictionMetiers\r\n- Un texte court augmente la pertinence des prédictions (évitez les textes longs).\r\n- Si le texte à rapprocher du ROME est peu explicite, précisez le champ \"contexte\" pour faciliter la prédiction de /PredictionMetiers (par exemple, l’intitulé \"conseiller\" peut se décliner en plusieurs appellations métier telles que \"conseiller en immobilier\" ou \"conseiller à l'emploi« , en précisant le champ contexte vous vous assurez d’une prédiction plus cohérente).\r\n- Il n'est pas possible de prédire plus de 20 intitulés par appel.\r\nUtiliser /performancePredictionMetiers pour nous aider à améliorer notre modèle IA.", + "operationId": "Prédiction des appellations métier du ROME", + "requestBody": { + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/AppellationDTO" + }, + "examples": { + "Example 1": { + "value": { + "appellations": [ + { + "intitule": "Boucher", + "identifiant": "123456", + "contexte": "Commerce de détail de viandes et de produits à base de viande en magasin spécialisé" + } + ], + "options": { + "nomAppelant": "francetravail", + "nbResultats": 2, + "seuilScorePrediction": 0.7 + } + } + } + } + } + } + }, + "responses": { + "200": { + "description": "En cas de succès à l'appel API, cette dernière renvoie un code http : 200 OK ", + "content": { + "application/json; charset=utf-8": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PredictionAppellation" + } + }, + "examples": { + "Example 1": { + "value": [ + { + "metiersRome": [ + { + "libelleAppellation": "Boucher / Bouchère", + "codeAppellation": "11564", + "libelleRome": "Boucherie", + "codeRome": "D1101", + "scorePrediction": 0.75 + } + ], + "uuidInference": "bca57776-9e3f-4c72-b939-8a48cd87ff6e", + "identifiant": "123456", + "intitule": "boucher", + "contexte": "Commerce de détail de viandes et de produits à base de viande en magasin spécialisé" + } + ] + } + } + } + } + }, + "400": { + "description": "En cas de réponse 400, veuillez vous référer à l'erreur mentionnée dans l'objet message.", + "content": { + "application/json": { + "schema": { + "type": "object" + }, + "examples": { + "Example 1": { + "value": { + "classeOrigine": "fr.pe.empl.service.so072.exceptions.RomeoBadRequestException", + "codeErreur": "J072000G", + "codeHttp": 400, + "message": "Le champ optionsSupervision.nomAppelant est obligatoire" + } + } + } + } + } + }, + "500": { + "description": "Erreur serveur." + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/romeo/v2", + "description": "" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer SR-QkBNyazIvwyry39FxlZ7BMw4" + } + } + ] + } + } + }, + "tags": [ + { + "name": "Appellation", + "description": "Prédictions sur les appellations" + }, + { + "name": "Competence", + "description": "Prédictions sur les compétences" + } + ], + "components": { + "schemas": { + "PerformanceCompetenceDTO": { + "type": "object", + "properties": { + "performanceCompetence": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PerformanceCompetence" + } + }, + "optionsSupervision": { + "$ref": "#/components/schemas/OptionsSupervision" + } + } + }, + "PerformanceCompetence": { + "type": "object", + "properties": { + "uuidInference": { + "type": "string", + "description": "Identifiant unique de l'inférence renvoyé par l'API.", + "example": "b42110bb-3d55-4e92-9930-133c5d92a555" + }, + "bonnePrediction": { + "type": "boolean", + "enum": [ + true, + false + ], + "description": "- True : la prédiction est correcte\r\n- False : la prédiction est fausse " + }, + "codeCompetence": { + "type": "string", + "description": "- Si \"bonneprediction\" est true : veuillez renseigner le code OGR du savoir / savoir-faire prédit par l'IA qui a été sélectionné\r\n- Si \"bonneprediction\" est false : veuillez renseigner le code OGR du savoir / savoir-faire que vous auriez souhaité avoir", + "example": "101846" + } + }, + "required": [ + "uuidInference", + "bonnePrediction" + ] + }, + "OptionsSupervision": { + "type": "object", + "properties": { + "nomAppelant": { + "type": "string", + "description": "Nom de l'application partenaire ou du partenaire appelant la ressource", + "example": "francetravail" + } + }, + "required": [ + "nomAppelant" + ] + }, + "ExceptionPerformanceCompetence": { + "type": "object", + "properties": { + "uuidInference": { + "type": "string", + "description": "identifiant unique de l'inférence, utile pour l'appel à la ressource performancePredicitonCompetences", + "example": "b42110bb-3d55-4e92-9930-133c5d92a555" + } + }, + "required": [ + "uuidInference" + ] + }, + "PerformanceAppellationDTO": { + "type": "object", + "properties": { + "performanceAppellation": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PerformanceAppellation" + } + }, + "optionsSupervision": { + "$ref": "#/components/schemas/OptionsSupervision" + } + } + }, + "PerformanceAppellation": { + "type": "object", + "properties": { + "uuidInference": { + "type": "string", + "description": "Identifiant unique de l'inférence renvoyé par l'API.", + "example": "93f7f573-da71-4382-94c7-e21db9c9a30f" + }, + "bonnePrediction": { + "type": "boolean", + "enum": [ + true, + false + ], + "description": "- True : la prédiction est correcte\r\n- False : la prédiction est fausse " + }, + "codeAppellation": { + "type": "string", + "description": "- Si \"bonneprediction\" est true : veuillez renseigner le code OGR de l'appellation métier prédite par l'IA qui a été sélectionnée\r\n- Si \"bonneprediction\" est false : veuillez renseigner le code OGR de l'appellation métier que vous auriez souhaité avoir", + "example": "11564" + } + }, + "required": [ + "uuidInference", + "bonnePrediction" + ], + "x-examples": { + "Example 1": { + "uuidInference": "string", + "bonnePrediction": true, + "codeAppellation": "string" + } + } + }, + "ExceptionPerformanceAppellation": { + "type": "object", + "properties": { + "uuidInference": { + "type": "string", + "example": "b42110bb-3d55-4e92-9930-133c5d92a555" + } + } + }, + "CompetenceDTO": { + "type": "object", + "properties": { + "competences": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Competence" + } + }, + "options": { + "$ref": "#/components/schemas/Options" + } + } + }, + "Competence": { + "type": "object", + "properties": { + "intitule": { + "type": "string", + "description": "Texte libre pour lequel on souhaite prédire un savoir / savoir-faire du ROME (par exemple une compétence d'un CV)\r\n", + "example": "faire du pain" + }, + "identifiant": { + "type": "string", + "description": "Identifiant fonctionnel unique, clé permettant d'identifier l'intitulé à prédire dans la liste fournie en entrée du service.\r\n\r\nCet identifiant est à la main du service appelant, il permet de rapprocher l'intitulé envoyé avec la prédiction retournée.", + "example": "123456" + } + }, + "required": [ + "intitule", + "identifiant" + ] + }, + "Options": { + "type": "object", + "properties": { + "nomAppelant": { + "type": "string", + "description": "Nom de l'application partenaire ou du partenaire appelant la ressource", + "example": "francetravail" + }, + "nbResultats": { + "type": "integer", + "description": "nombre de prédictions à retourner\r\n\r\n- entier compris entre 1 et 25\r\n\r\n- par défaut, retourne 5 résultats", + "format": "int32", + "example": 2 + }, + "seuilScorePrediction": { + "type": "number", + "description": "Niveau de confiance de l'IA accompagnant chaque prédiction. Plus le score est proche de 1, plus l’IA est confiante dans sa prédiction. \r\n\r\nSi un seuil est défini, il prévaut sur le nombre de résultats qui a été renseigné", + "format": "float", + "example": 0.7 + } + }, + "required": [ + "nomAppelant" + ] + }, + "PredictionCompetence": { + "type": "object", + "properties": { + "uuidInference": { + "type": "string", + "description": "identifiant unique de l'inférence, utile pour l'appel à la ressource performancePredicitonCompetences", + "example": "93f7f573-da71-4382-94c7-e21db9c9a30f" + }, + "identifiant": { + "type": "string", + "description": "Identifiant fonctionnel unique, clé permettant d'identifier l'intitulé à prédire dans la liste fournie en entrée du service.\r\n\r\nCet identifiant est à la main du service appelant, il permet de rapprocher l'intitulé envoyé avec la prédiction retournée.", + "example": "123456" + }, + "intitule": { + "type": "string", + "description": "Texte libre renseigné lors de l'appel à l'API et pour lequel on souhaite prédire un savoir / savoir-faire du ROME", + "example": "faire du pain" + }, + "competencesRome": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CompetenceRome" + } + } + }, + "required": [ + "uuidInference", + "identifiant", + "intitule" + ], + "x-examples": {} + }, + "CompetenceRome": { + "type": "object", + "properties": { + "libelleCompetence": { + "type": "string", + "description": "Libellé du savoir / savoir-faire du ROME prédit", + "example": "Fabriquer des produits de boulangerie" + }, + "codeCompetence": { + "type": "string", + "description": "Code du savoir / savoir-faire du ROME prédit", + "example": "119357" + }, + "typeCompetence": { + "type": "string", + "description": "Type du savoir / savoir-faire du ROME prédit (savoir, compétence, macro-compétence)", + "example": "COMPETENCE-DETAILLEE" + }, + "scorePrediction": { + "type": "number", + "description": "Score de confiance de l'IA suite à sa prédiction (plus on est proche de 1 plus l'IA est confiante)", + "format": "float", + "example": 0.8 + } + }, + "required": [ + "libelleCompetence", + "codeCompetence", + "typeCompetence", + "scorePrediction" + ], + "x-examples": { + "Example 1": { + "libelleCompetence": "Utiliser les réseaux sociaux", + "codeCompetence": "300425", + "typeCompetence": "MACRO-SAVOIR-FAIRE", + "scorePrediction": 0.8682828 + } + } + }, + "AppellationDTO": { + "type": "object", + "properties": { + "appellations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Appellation" + } + }, + "options": { + "$ref": "#/components/schemas/Options" + } + } + }, + "Appellation": { + "type": "object", + "properties": { + "intitule": { + "type": "string", + "description": "Texte libre pour lequel on souhaite prédire un métier (par exemple l'intitulé d'une offre d'emploi). Pour rappel, il n'est pas possible de prédire plus de 20 intitulés par appel.", + "example": "Boucher" + }, + "identifiant": { + "type": "string", + "description": "Identifiant fonctionnel unique, clé permettant d'identifier l'intitulé à prédire dans la liste fournie en entrée du service.\r\n\r\nCet identifiant est à la main du service appelant, il permet de rapprocher l'intitulé envoyé avec la prédiction retournée.", + "example": "123456" + }, + "contexte": { + "type": "string", + "description": "aide l'IA à trouver la prédiction la plus pertinente en précisant le secteur d’activité. Ce contexte peut être décliné sous 3 formes :\r\n\r\n- un libellé NAF (INSEE)\r\n- un code SIRET (nous récupérons le libellé NAF associé à ce code)\r\n- un texte libre\r\n\r\nSi le texte à rapprocher du ROME est peu explicite, précisez le champ \"contexte\" pour faciliter la prédiction de Text2App (par exemple, l’intitulé \"conseiller\" peut se décliner en plusieurs appellations métier telles que \"conseiller en immobilier\" ou \"conseiller à l'emploi« , en précisant le champ contexte vous vous assurez d’une prédiction plus cohérente).", + "example": "Commerce de détail de viandes et de produits à base de viande en magasin spécialisé" + } + }, + "required": [ + "intitule", + "identifiant" + ], + "x-examples": { + "Example 1": "Body\n{    \"appellations\": [        {            \"intitule\": \"boucher\",            \"contexte\": \"grande surface\",            \"identifiant\": \"123456\"        }    ],    \"options\": {        \"nomAppelant\": \"Application n°1\",        \"nbResultats\": 1,        \"seuilScorePrediction\": \"\"    } }" + } + }, + "PredictionAppellation": { + "type": "object", + "properties": { + "metiersRome": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AppellationRome" + } + }, + "uuidInference": { + "type": "string", + "description": "Identifiant unique de l'inférence, utile pour l'appel à la ressource performancePredicitonMetiers", + "example": "bca57776-9e3f-4c72-b939-8a48cd87ff6e" + }, + "identifiant": { + "type": "string", + "description": "Identifiant fonctionnel unique, clé permettant d'identifier l'intitulé à prédire dans la liste fournie en entrée du service. Cet identifiant est à la main du service appelant, il permet de rapprocher l'intitulé envoyé avec la prédiction retournée.", + "example": "123456" + }, + "intitule": { + "type": "string", + "description": "Texte libre renseigné lors de l'appel à l'API et pour lequel on souhaite prédire un métier du ROME (par exemple l'intitulé d'une offre d'emploi).\nPour rappel, il n'est pas possible de prédire plus de 20 intitulés par appel.", + "example": "boucher" + }, + "contexte": { + "type": "string", + "description": "Contexte renseigné lors de l'appel à l'API afin de prédire un métier du ROME", + "example": "Commerce de détail de viandes et de produits à base de viande en magasin spécialisé" + } + }, + "required": [ + "uuidInference", + "identifiant", + "intitule", + "contexte" + ] + }, + "AppellationRome": { + "type": "object", + "properties": { + "libelleAppellation": { + "type": "string", + "description": "Libellé de l'appellation métier du ROME prédite", + "example": "Boucher / Bouchère" + }, + "codeAppellation": { + "type": "string", + "description": "Code de l'appellation métier ROME prédite", + "example": "11564" + }, + "libelleRome": { + "type": "string", + "description": "Libellé de la fiche ROME parente", + "example": "Boucherie" + }, + "codeRome": { + "type": "string", + "description": "Code ROME de la fiche parente", + "example": "D1101" + }, + "scorePrediction": { + "type": "number", + "description": "Score de confiance de l'IA suite à sa prédiction (plus on est proche de 1 plus l'IA est confiante)", + "format": "float", + "example": 0.75 + } + }, + "required": [ + "libelleAppellation", + "codeAppellation", + "libelleRome", + "codeRome", + "scorePrediction" + ] + } + } + } +} \ No newline at end of file diff --git a/backend/api/sortants_de_formation_et_acces_a_lemploi_bundled.json b/backend/api/sortants_de_formation_et_acces_a_lemploi_bundled.json new file mode 100644 index 0000000..d437420 --- /dev/null +++ b/backend/api/sortants_de_formation_et_acces_a_lemploi_bundled.json @@ -0,0 +1,2781 @@ +{ + "openapi": "3.0.1", + "info": { + "version": "1", + "title": "Sortants de formation et accès à l'emploi", + "description": "Accédez aux statistiques de France Travail - Sortants de formation et accès à l'emploi. \n\nCette API vous met à disposition des chiffres exacts sur les sorties de formation et l'accès à l'emploi des demandeurs d'emploi en catégories A et B.\n\n**Scopes :** `api_stats-entrees-sorties-formationsv1`,`accesemploiDEformes`\n\n**Royaume :** `/partenaire`\n" + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ], + "paths": { + "/v1/indicateur/stat-acces-emploi-sorties-formation": { + "post": { + "tags": [ + "Accès à l'emploi" + ], + "summary": "Stats d'accès à l'emploi des demandeurs d'emploi sortants de formation (ACC_2)", + "description": "Permet de rechercher les données statistiques sur l’Accès à l’emploi à 6 mois des demandeurs d'emploi sortants de formation (ACC_2) selon des critères obligatoires (territoire, activité) et facultatifs (délai d’accès à l’emploi, durée d’emploi, périodes, caractéristiques).", + "operationId": "rechercherStatAccesEmploiSortiesFormation", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CritereIndicateurAvecNomenclature" + }, + "examples": { + "default": { + "value": { + "codeTypeTerritoire": "REG", + "codeTerritoire": "75", + "codeTypeActivite": "FORM14", + "codeActivite": "00101", + "codeTypePeriode": "TRIMESTRE", + "codeTypeNomenclature": "ACCESEMP" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Statistiques accès à l’emploi trouvées", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/IndicateurRetour" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndicateurRetour" + } + } + } + }, + "400": { + "description": "Les paramètres en entrée ne sont pas valides" + }, + "500": { + "description": "Erreur interne du serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ] + } + }, + "/v1/indicateur/stat-demandeurs-sorties-formation": { + "post": { + "tags": [ + "Demandeurs" + ], + "summary": "Stats des demandeurs d'emploi sortants de formation (DE_3)", + "description": "Permet de rechercher les données statistiques sur les demandeurs d'emploi sortants de formation par type de formation et métier recherché (DE_3), selon des critères obligatoires (territoire, activité) et facultatifs (périodes, caractéristiques).", + "operationId": "rechercherStatDemandeursSortiesFormation", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CritereIndicateurSansNomenclature" + }, + "examples": { + "default": { + "value": { + "codeTypeTerritoire": "REG", + "codeTerritoire": "75", + "codeTypeActivite": "ROME", + "codeActivite": "A1203", + "codeTypePeriode": "TRIMESTRE" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Statistiques demandeurs d'emploi sorties formation trouvées", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/IndicateurRetour" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndicateurRetour" + } + } + } + }, + "400": { + "description": "Les paramètres en entrée ne sont pas valides" + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ] + } + }, + "/v1/referentiel/activite": { + "get": { + "tags": [ + "Activite" + ], + "summary": "Consulter une activité", + "description": "Permet de consulter une activité du Référentiel Smart Emploi selon des critères obligatoires (code type activité et code activité).", + "operationId": "recupererActiviteParCodeActiviteEtCodeTypeActivite", + "parameters": [ + { + "name": "codeActivite", + "in": "query", + "description": "codeActivite", + "required": true, + "schema": { + "type": "string", + "example": "A1203" + }, + "examples": { + "default": { + "value": "A1203" + } + } + }, + { + "name": "codeTypeActivite", + "in": "query", + "description": "codeTypeActivite", + "required": true, + "schema": { + "type": "string", + "example": "ROME" + }, + "examples": { + "default": { + "value": "ROME" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ], + "responses": { + "200": { + "description": "Retourne une activité", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Activite" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Activite" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ] + } + }, + "/v1/referentiel/activites": { + "get": { + "tags": [ + "Activite" + ], + "summary": "Lister les activités", + "description": "Permet de lister les activités du Référentiel Smart Emploi.", + "operationId": "recupererListeActivite", + "responses": { + "200": { + "description": "Retourne la liste d'activités", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeActivite" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeActivite" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ] + } + }, + "/v1/referentiel/activites/{codeTypeActivite}": { + "get": { + "tags": [ + "Activite" + ], + "summary": "Lister les activités pour un type d'activité", + "description": "Permet de lister les activités du Référentiel Smart Emploi pour un type d'activité.", + "operationId": "recupererListeActiviteParCodeTypeActivite", + "parameters": [ + { + "name": "filtreActivite", + "in": "query", + "description": "filtreActivite", + "schema": { + "type": "string", + "example": "A12" + }, + "examples": { + "default": { + "value": "A12" + } + } + }, + { + "name": "codeTypeActivite", + "in": "path", + "description": "codeTypeActivite", + "required": true, + "schema": { + "type": "string", + "example": "ROME" + }, + "examples": { + "default": { + "value": "ROME" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste d'activités", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeActivite" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeActivite" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ] + } + }, + "/v1/referentiel/type-activites": { + "get": { + "tags": [ + "Activite" + ], + "summary": "Lister les types d'activité", + "description": "Permet de lister les types d'activité du Référentiel Smart Emploi.", + "operationId": "recupererListeTypeActivite", + "responses": { + "200": { + "description": "Retourne la liste des types d'activités", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeTypeActivite" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeTypeActivite" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ] + } + }, + "/v1/referentiel/type-activite/{codeTypeActivite}": { + "get": { + "tags": [ + "Activite" + ], + "summary": "Consulter un type d'activité", + "description": "Permet de consulter un type d'activité du Référentiel Smart Emploi.", + "operationId": "recupererTypeActiviteParCodeTypeActivite", + "parameters": [ + { + "name": "codeTypeActivite", + "in": "path", + "description": "codeTypeActivite", + "required": true, + "schema": { + "type": "string", + "example": "ROME" + }, + "examples": { + "default": { + "value": "ROME" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ], + "responses": { + "200": { + "description": "Retourne le type d'activité", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/TypeActivite" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/TypeActivite" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ] + } + }, + "/v1/referentiel/caracteristique": { + "get": { + "tags": [ + "Caracteristique" + ], + "summary": "Consulter une caractéristique", + "description": "Permet de consulter une caractéristique du Référentiel Smart Emploi selon des critères obligatoires (code type caractéristique et code caractéristique).", + "operationId": "recupererCaracteristiqueParCodeCaracteristiqueEtCodeTypeCaracteristique", + "parameters": [ + { + "name": "codeCaracteristique", + "in": "query", + "description": "codeCaracteristique", + "required": true, + "schema": { + "type": "string", + "example": "H" + }, + "examples": { + "default": { + "value": "H" + } + } + }, + { + "name": "codeTypeCaracteristique", + "in": "query", + "description": "codeTypeCaracteristique", + "required": true, + "schema": { + "type": "string", + "example": "GENRE" + }, + "examples": { + "default": { + "value": "GENRE" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ], + "responses": { + "200": { + "description": "Retourne la caractéristique", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Caracteristique" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Caracteristique" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ] + } + }, + "/v1/referentiel/caracteristiques": { + "get": { + "tags": [ + "Caracteristique" + ], + "summary": "Lister les caractéristiques", + "description": "Permet de lister les caractéristiques du Référentiel Smart Emploi.", + "operationId": "recupererListeCaracteristique", + "responses": { + "200": { + "description": "Retourne la liste des caractéristiques", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeCaracteristique" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeCaracteristique" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ] + } + }, + "/v1/referentiel/caracteristiques/{codeTypeCaracteristique}": { + "get": { + "tags": [ + "Caracteristique" + ], + "summary": "Lister les caractéristiques par type d'activité", + "description": "Permet de lister les caractéristiques du Référentiel Smart Emploi pour un type de caractéristique.", + "operationId": "recupererListeCaracteristiqueParCodeTypeCaracteristique", + "parameters": [ + { + "name": "codeTypeCaracteristique", + "in": "path", + "description": "codeTypeCaracteristique", + "required": true, + "schema": { + "type": "string", + "example": "GENRE" + }, + "examples": { + "default": { + "value": "GENRE" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des caractéristiques", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeCaracteristique" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeCaracteristique" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ] + } + }, + "/v1/referentiel/type-caracteristiques": { + "get": { + "tags": [ + "Caracteristique" + ], + "summary": "Lister les types de caractéristique", + "description": "Permet de lister les types de caractéristique du Référentiel Smart Emploi.", + "operationId": "recupererListeTypeCaracteristique", + "responses": { + "200": { + "description": "Retourne la liste des types de caractéristiques", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeTypeCaracteristique" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeTypeCaracteristique" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ] + } + }, + "/v1/referentiel/type-caracteristique/{codeTypeCaracteristique}": { + "get": { + "tags": [ + "Caracteristique" + ], + "summary": "Consulter un type de caractéristique", + "description": "Permet de consulter un type de caractéristique du Référentiel Smart Emploi.", + "operationId": "recupererTypeCaracteristiqueParCodeTypeCaracteristique", + "parameters": [ + { + "name": "codeTypeCaracteristique", + "in": "path", + "description": "codeTypeCaracteristique", + "required": true, + "schema": { + "type": "string", + "example": "GENRE" + }, + "examples": { + "default": { + "value": "GENRE" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ], + "responses": { + "200": { + "description": "Retourne un type de caractéristique", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/TypeCaracteristique" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/TypeCaracteristique" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ] + } + }, + "/v1/referentiel/details-indicateurs": { + "get": { + "tags": [ + "Catalogue Indicateur" + ], + "summary": "Consulter le détail d'un indicateur.", + "description": "Permet de lister toutes les valeurs possibles des critères d’entrée (Types de territoire, Types d'activité, Type de période, Nomenclatures, Croisements disponibles, Caractéristiques), et des Types de valeur obtenus, pour un indicateur donné. Un croisement disponible correspond à une combinaison [Type de territoire, Type d'activité, Type de période et Nomenclature].", + "operationId": "recupererDetailsIndicateurs", + "parameters": [ + { + "name": "codeFamille", + "in": "query", + "description": "codeFamille", + "schema": { + "type": "string", + "example": "DEMANDEURS" + }, + "examples": { + "default": { + "value": "DEMANDEURS" + } + } + }, + { + "name": "codeIndicateur", + "in": "query", + "description": "codeIndicateur", + "schema": { + "type": "string", + "example": "DE_1" + }, + "examples": { + "default": { + "value": "DE_1" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ], + "responses": { + "200": { + "description": "Détail d'un indicateur", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeDetailIndicateur" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeDetailIndicateur" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ] + } + }, + "/v1/referentiel/nomenclatures": { + "get": { + "tags": [ + "Nomenclature" + ], + "summary": "Lister les nomenclatures", + "description": "Permet de lister les nomenclatures du Référentiel Smart Emploi.", + "operationId": "recupererListeNomenclature", + "responses": { + "200": { + "description": "Retourne la liste des nomenclatures", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeNomenclature" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeNomenclature" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ] + } + }, + "/v1/referentiel/nomenclatures/{codeTypeNomenclature}": { + "get": { + "tags": [ + "Nomenclature" + ], + "summary": "Lister les nomenclatures par type de nomenclature", + "description": "Permet de lister les nomenclatures du Référentiel Smart Emploi pour un type de nomenclature.", + "operationId": "recupererListeNomenclatureParCodeTypeNomenclature", + "parameters": [ + { + "name": "codeTypeNomenclature", + "in": "path", + "description": "codeTypeNomenclature", + "required": true, + "schema": { + "type": "string", + "example": "CATCAND" + }, + "examples": { + "default": { + "value": "CATCAND" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des nomenclatures", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeNomenclature" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeNomenclature" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ] + } + }, + "/v1/referentiel/type-nomenclatures": { + "get": { + "tags": [ + "Nomenclature" + ], + "summary": "Lister les types nomenclatures", + "description": "Permet de lister les types de nomenclature du Référentiel Smart Emploi.", + "operationId": "recupererListeTypeNomenclature", + "responses": { + "200": { + "description": "Retourne la liste des types nomenclatures", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeTypeNomenclature" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeTypeNomenclature" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ] + } + }, + "/v1/referentiel/nomenclature": { + "get": { + "tags": [ + "Nomenclature" + ], + "summary": "Consulter une nomenclature", + "description": "Permet de consulter une nomenclature du Référentiel Smart Emploi selon des critères obligatoires (code type nomenclature et code nomenclature).", + "operationId": "recupererNomenclatureParCodeNomenclatureEtCodeTypeNomenclature", + "parameters": [ + { + "name": "codeNomenclature", + "in": "query", + "description": "codeNomenclature", + "required": true, + "schema": { + "type": "string", + "example": "A" + }, + "examples": { + "default": { + "value": "A" + } + } + }, + { + "name": "codeTypeNomenclature", + "in": "query", + "description": "codeTypeNomenclature", + "required": true, + "schema": { + "type": "string", + "example": "CATCAND" + }, + "examples": { + "default": { + "value": "CATCAND" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ], + "responses": { + "200": { + "description": "Retourne la nomenclature", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Nomenclature" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Nomenclature" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ] + } + }, + "/v1/referentiel/type-nomenclature/{codeTypeNomenclature}": { + "get": { + "tags": [ + "Nomenclature" + ], + "summary": "Consulter un type de nomenclature", + "description": "Permet de consulter un type de nomenclature du Référentiel Smart Emploi.", + "operationId": "recupererTypeNomenclatureParCodeTypeNomenclature", + "parameters": [ + { + "name": "codeTypeNomenclature", + "in": "path", + "description": "codeTypeNomenclature", + "required": true, + "schema": { + "type": "string", + "example": "CATCAND" + }, + "examples": { + "default": { + "value": "CATCAND" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ], + "responses": { + "200": { + "description": "Retourne le type nomenclature", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/TypeNomenclature" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/TypeNomenclature" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ] + } + }, + "/v1/referentiel/periodes": { + "get": { + "tags": [ + "Periode" + ], + "summary": "Lister les périodes", + "description": "Permet de lister les périodes du Référentiel Smart Emploi.", + "operationId": "recupererListePeriode", + "responses": { + "200": { + "description": "Retourne la liste des périodes", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListePeriode" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListePeriode" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ] + } + }, + "/v1/referentiel/periodes/{codeTypePeriode}": { + "get": { + "tags": [ + "Periode" + ], + "summary": "Lister les périodes par type de période", + "description": "Permet de lister les périodes du Référentiel Smart Emploi pour un type de période.", + "operationId": "recupererListePeriodeParCodeTypePeriode", + "parameters": [ + { + "name": "codePeriode", + "in": "query", + "description": "codePeriode", + "schema": { + "type": "string", + "example": 2019 + }, + "examples": { + "default": { + "value": 2019 + } + } + }, + { + "name": "nbPeriode", + "in": "query", + "description": "nbPeriode", + "schema": { + "type": "integer", + "format": "int32", + "example": 5 + }, + "examples": { + "default": { + "value": 5 + } + } + }, + { + "name": "critereTemporel", + "in": "query", + "description": "critereTemporel", + "schema": { + "type": "string", + "example": "A" + }, + "examples": { + "default": { + "value": "A" + } + } + }, + { + "name": "codeTypePeriode", + "in": "path", + "description": "codeTypePeriode", + "required": true, + "schema": { + "type": "string", + "example": "ANNEE" + }, + "examples": { + "default": { + "value": "ANNEE" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des périodes", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListePeriode" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListePeriode" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ] + } + }, + "/v1/referentiel/type-periodes": { + "get": { + "tags": [ + "Periode" + ], + "summary": "Lister les types périodes", + "description": "Permet de lister les types de période du Référentiel Smart Emploi.", + "operationId": "recupererListeTypePeriode", + "responses": { + "200": { + "description": "Retourne la liste des types de période", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeTypePeriode" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeTypePeriode" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ] + } + }, + "/v1/referentiel/periode": { + "get": { + "tags": [ + "Periode" + ], + "summary": "Consulter une période", + "description": "Permet de consulter une période du Référentiel Smart Emploi selon des critères obligatoires (code type période et code période).", + "operationId": "recupererPeriodeParCodePeriodeEtCodeTypePeriode", + "parameters": [ + { + "name": "codePeriode", + "in": "query", + "description": "codePeriode", + "required": true, + "schema": { + "type": "string", + "example": 2019 + }, + "examples": { + "default": { + "value": 2019 + } + } + }, + { + "name": "codeTypePeriode", + "in": "query", + "description": "codeTypePeriode", + "required": true, + "schema": { + "type": "string", + "example": "ANNEE" + }, + "examples": { + "default": { + "value": "ANNEE" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ], + "responses": { + "200": { + "description": "Retourne la période", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Periode" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Periode" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ] + } + }, + "/v1/referentiel/type-periode/{codeTypePeriode}": { + "get": { + "tags": [ + "Periode" + ], + "summary": "Consulter un type de période", + "description": "Permet de consulter un type de période du Référentiel Smart Emploi.", + "operationId": "recupererTypePeriodeParCodeTypePeriode", + "parameters": [ + { + "name": "codeTypePeriode", + "in": "path", + "description": "codeTypePeriode", + "required": true, + "schema": { + "type": "string", + "example": "ANNEE" + }, + "examples": { + "default": { + "value": "ANNEE" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ], + "responses": { + "200": { + "description": "Retourne le type de période", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/TypePeriode" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/TypePeriode" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ] + } + }, + "/v1/referentiel/territoires": { + "get": { + "tags": [ + "Territoire" + ], + "summary": "Lister les territoires", + "description": "Permet de lister les territoires du Référentiel Smart Emploi.", + "operationId": "recupererListeTerritoire", + "responses": { + "200": { + "description": "Retourne la liste des territoires", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeTerritoire" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeTerritoire" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ] + } + }, + "/v1/referentiel/territoires/{codeTypeTerritoire}": { + "get": { + "tags": [ + "Territoire" + ], + "summary": "Lister les territoires par type de territoire", + "description": "Permet de lister les territoires du Référentiel Smart Emploi pour un type de territoire.", + "operationId": "recupererListeTerritoireParCodeTypeTerritoire", + "parameters": [ + { + "name": "filtreTerritoire", + "in": "query", + "description": "filtreTerritoire", + "schema": { + "type": "string", + "example": "G" + }, + "examples": { + "default": { + "value": "G" + } + } + }, + { + "name": "codeTypeTerritoire", + "in": "path", + "description": "codeTypeTerritoire", + "required": true, + "schema": { + "type": "string", + "example": "DEP" + }, + "examples": { + "default": { + "value": "DEP" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ], + "responses": { + "200": { + "description": "Retourne la liste des territoires pour un type", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeTerritoire" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeTerritoire" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ] + } + }, + "/v1/referentiel/type-territoires": { + "get": { + "tags": [ + "Territoire" + ], + "summary": "Lister les types de territoire", + "description": "Permet de lister les types de territoire du Référentiel Smart Emploi.", + "operationId": "recupererListeTypeTerritoire_1", + "responses": { + "200": { + "description": "Retourne la liste des types de territoire", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListeTypeTerritoire" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListeTypeTerritoire" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ], + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ] + } + }, + "/v1/referentiel/territoire": { + "get": { + "tags": [ + "Territoire" + ], + "summary": "Consulter un territoire", + "description": "Permet de consulter un territoire du Référentiel Smart Emploi selon des critères obligatoires (code type territoire et code territoire).", + "operationId": "recupererTerritoireParCodeTerritoireEtCodeTypeTerritoire", + "parameters": [ + { + "name": "codeTerritoire", + "in": "query", + "description": "codeTerritoire", + "required": true, + "schema": { + "type": "string", + "example": 33 + }, + "examples": { + "default": { + "value": 33 + } + } + }, + { + "name": "codeTypeTerritoire", + "in": "query", + "description": "codeTypeTerritoire", + "required": true, + "schema": { + "type": "string", + "example": "DEP" + }, + "examples": { + "default": { + "value": "DEP" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ], + "responses": { + "200": { + "description": "Retourne le territoire", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Territoire" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Territoire" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ] + } + }, + "/v1/referentiel/type-territoire/{codeTypeTerritoire}": { + "get": { + "tags": [ + "Territoire" + ], + "summary": "Consulter un type de territoire", + "description": "Permet de consulter un type de territoire du Référentiel Smart Emploi.", + "operationId": "recupererTypeTerritoireParCodeTypeTerritoire", + "parameters": [ + { + "name": "codeTypeTerritoire", + "in": "path", + "description": "codeTypeTerritoire", + "required": true, + "schema": { + "type": "string", + "example": "DEP" + }, + "examples": { + "default": { + "value": "DEP" + } + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "default": "Bearer JWlJ19gHUIYRc0h_1w16A0VGjsU" + } + } + ], + "responses": { + "200": { + "description": "Retourne le type de territoire", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/TypeTerritoire" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/TypeTerritoire" + } + } + } + }, + "500": { + "description": "Erreur interne au serveur" + } + }, + "servers": [ + { + "url": "https://api.francetravail.io/partenaire/stats-entrees-sorties-formations" + } + ] + } + } + }, + "components": { + "schemas": { + "CritereIndicateurAvecNomenclature": { + "type": "object", + "properties": { + "codeTypeTerritoire": { + "type": "string", + "description": "Le type de territoire (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "DEP" + }, + "codeTerritoire": { + "type": "string", + "description": "Le code du territoire (voir le référentiel Territoire pour les codes disponibles)", + "example": "33" + }, + "codeTypeActivite": { + "type": "string", + "description": "Le type d'activité (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "ROME" + }, + "codeActivite": { + "type": "string", + "description": "Le code d'activité (voir le référentiel Activite pour les codes disponibles)", + "example": "K1303" + }, + "codeTypePeriode": { + "type": "string", + "description": "Le type de période (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "TRIMESTRE" + }, + "codeTypeNomenclature": { + "type": "string", + "description": "Le type de nomenclature (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "CATCAND" + }, + "dernierePeriode": { + "type": "boolean", + "description": "Optionnel: A renseigner à true pour que la recherche se limite à la période la plus récente sur cet indicateur, sinon la recherche se limite à la liste de périodes fournie en entrée" + }, + "listeCodePeriode": { + "type": "array", + "description": "Optionnel: A renseigner avec les périodes souhaitées, sinon la recherche est réalisée sur toutes les périodes disponibles sur cet indicateur", + "items": { + "type": "string", + "description": "Optionnel: A renseigner avec les périodes souhaitées, sinon la recherche est réalisée sur toutes les périodes disponibles sur cet indicateur", + "example": "[\"2020T2\",\"2020T3\"]" + }, + "example": [ + "2020T2", + "2020T3" + ] + }, + "listeCodeNomenclature": { + "type": "array", + "description": "Optionnel: A renseigner avec les nomenclatures souhaitées, sinon la recherche est réalisée sur toutes les nomenclatures disponibles sur cet indicateur", + "items": { + "type": "string", + "description": "Optionnel: A renseigner avec les nomenclatures souhaitées, sinon la recherche est réalisée sur toutes les nomenclatures disponibles sur cet indicateur", + "example": "[\"A\",\"B\",\"C\"]" + }, + "example": [ + "A", + "B", + "C" + ] + }, + "sansCaracteristiques": { + "type": "boolean", + "description": "Optionnel: A renseigner à true pour que la recherche se limite aux valeurs hors caractéristiques sur cet indicateur, sinon la recherche se limite aux valeurs de la liste de caractéristiques fournie en entrée" + }, + "listeCaracteristiques": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Caracteristique" + } + } + }, + "required": [ + "codeTypeTerritoire", + "codeTerritoire", + "codeTypeActivite", + "codeActivite", + "codeTypePeriode", + "codeTypeNomenclature" + ] + }, + "Caracteristique": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour de la caractéristique", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeCaracteristique": { + "type": "string", + "description": "Le code du type de la caractéristique", + "example": "AGC_RAT" + }, + "codeCaracteristique": { + "type": "string", + "description": "Le code de la caractéristique", + "example": "AGC_BASS" + }, + "libelleCaracteristique": { + "type": "string", + "description": "Le libellé de la caractéristique", + "example": "rattachement agence bassin" + }, + "masque": { + "type": "boolean", + "description": "La caractéristique est masqué par l'administrateur", + "example": true + } + }, + "required": [ + "codeTypeCaracteristique", + "codeCaracteristique", + "libelleCaracteristique" + ], + "xml": { + "name": "CaracteristiqueReferentiel", + "namespace": "http://fr.pe.auto.service.da084.services.rest.model.referentiel" + } + }, + "IndicateurRetour": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour de l'indicateur", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeIndicateur": { + "type": "string", + "description": "Le code de l'indicateur", + "example": "DE_1" + }, + "codeFamille": { + "type": "string", + "description": "Le code famille de l'indicateur", + "example": "DEMANDEURS" + }, + "libIndicateur": { + "type": "string", + "description": "Le libellé de l'indicateur", + "example": "Nombre et % de DE par catégories x caractéristiques, % par activités (Rome, Compétence)" + }, + "libTerritoire": { + "type": "string", + "description": "Le libellé du territoire", + "example": "NOUVELLE-AQUITAINE" + }, + "listeValeursParPeriode": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ValeursParPeriode" + } + } + } + }, + "ValeursParPeriode": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour de la valeur", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeTerritoire": { + "type": "string", + "description": "Le code du type de territoire", + "example": "REG" + }, + "codeTerritoire": { + "type": "string", + "description": "Le code territoire", + "example": "75" + }, + "libTerritoire": { + "type": "string", + "description": "Le libellé du territoire", + "example": "NOUVELLE-AQUITAINE" + }, + "codeTypeActivite": { + "type": "string", + "description": "Le code du type d'activité", + "example": "ROME" + }, + "codeActivite": { + "type": "string", + "description": "Le code d'activité", + "example": "A1203" + }, + "libActivite": { + "type": "string", + "description": "Le libellé de l'activité", + "example": "Aménagement et entretien des espaces verts" + }, + "codeNomenclature": { + "type": "string", + "description": "Le code de nomenclature", + "example": "A" + }, + "libNomenclature": { + "type": "string", + "description": "Le libellé de nomenclature", + "example": "Demandeurs d'Emploi de catégorie A" + }, + "codeTypePeriode": { + "type": "string", + "description": "Le code du type de période", + "example": "TRIMESTRE" + }, + "codePeriode": { + "type": "string", + "description": "Le code de la période", + "example": "2023T4" + }, + "libPeriode": { + "type": "string", + "description": "Le libellé de la période", + "example": "4ème trimestre 2023" + }, + "valeurPrincipaleNom": { + "type": "string", + "description": "Le nom de la valeur principale", + "example": "Nombre de demandeurs d'emploi" + }, + "valeurPrincipaleNombre": { + "type": "integer", + "description": "La valeur principale", + "format": "int32", + "example": 4750 + }, + "valeurPrincipaleRang": { + "type": "integer", + "description": "La valeur principale si l'indicateur représente un rang", + "format": "int32", + "example": 4 + }, + "valeurPrincipaleMontant": { + "type": "number", + "description": "La valeur principale si l'indicateur représente un montant", + "format": "double", + "example": 55.5 + }, + "valeurPrincipaleTaux": { + "type": "number", + "description": "La valeur principale si l'indicateur représente un taux", + "format": "double", + "example": 10 + }, + "valeurSecondaireNombre": { + "type": "integer", + "description": "La valeur secondaire", + "format": "int32", + "example": 4750 + }, + "valeurSecondairePourcentage": { + "type": "number", + "description": "La valeur secondaire en pourcentage", + "format": "double", + "example": 54 + }, + "valeurSecondairePourcentage2": { + "type": "number", + "description": "La valeur secondaire en pourcentage", + "format": "double", + "example": 54 + }, + "valeurSecondaireTaux": { + "type": "number", + "description": "La valeur secondaire si l'indicateur représente un taux", + "format": "double", + "example": 10 + }, + "libPctParActivite": { + "type": "string", + "description": "Le libellé du pourcentage par activité", + "example": "Pourcentage de demandeurs d'emploi par activité" + }, + "listeValeurParCaract": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ValeursParCaracteristique" + } + } + } + }, + "ValeursParCaracteristique": { + "type": "object", + "properties": { + "codeTypeCaract": { + "type": "string", + "description": "La code du type de la caractéristique", + "example": "GENRE" + }, + "codeCaract": { + "type": "string", + "description": "La code de la caractéristique", + "example": "H" + }, + "libCaract": { + "type": "string", + "description": "Le libellé de la caractéristique", + "example": "Homme" + }, + "nombre": { + "type": "integer", + "description": "La valeur de la caractéristique", + "format": "int32", + "example": 4470 + }, + "pourcentage": { + "type": "number", + "description": "Le pourcentage de la caractéristique", + "format": "double", + "example": 94 + }, + "montant": { + "type": "number", + "description": "Le montant (s'il existe) de la caractéristique", + "format": "double", + "example": 10 + }, + "taux": { + "type": "number", + "description": "Le taux (s'il existe) de la caractéristique", + "format": "double", + "example": 10 + } + } + }, + "CritereIndicateurSansNomenclature": { + "type": "object", + "properties": { + "codeTypeTerritoire": { + "type": "string", + "description": "Le type de territoire (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "DEP" + }, + "codeTerritoire": { + "type": "string", + "description": "Le code du territoire (voir le référentiel Territoire pour les codes disponibles)", + "example": "33" + }, + "codeTypeActivite": { + "type": "string", + "description": "Le type d'activité (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "ROME" + }, + "codeActivite": { + "type": "string", + "description": "Le code d'activité (voir le référentiel Activite pour les codes disponibles)", + "example": "K1303" + }, + "codeTypePeriode": { + "type": "string", + "description": "Le type de période (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "TRIMESTRE" + }, + "dernierePeriode": { + "type": "boolean", + "description": "Optionnel: A renseigner à true pour que la recherche se limite à la période la plus récente sur cet indicateur, sinon la recherche se limite à la liste de périodes fournie en entrée" + }, + "listeCodePeriode": { + "type": "array", + "description": "Optionnel: A renseigner avec les périodes souhaitées, sinon la recherche est réalisée sur toutes les périodes disponibles sur cet indicateur", + "items": { + "type": "string", + "description": "Optionnel: A renseigner avec les périodes souhaitées, sinon la recherche est réalisée sur toutes les périodes disponibles sur cet indicateur", + "example": "[\"2020T2\",\"2020T3\"]" + }, + "example": [ + "2020T2", + "2020T3" + ] + }, + "sansCaracteristiques": { + "type": "boolean", + "description": "Optionnel: A renseigner à true pour que la recherche se limite aux valeurs hors caractéristiques sur cet indicateur, sinon la recherche se limite aux valeurs de la liste de caractéristiques fournie en entrée" + }, + "listeCaracteristiques": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Caracteristique" + } + } + }, + "required": [ + "codeTypeTerritoire", + "codeTerritoire", + "codeTypeActivite", + "codeActivite", + "codeTypePeriode" + ] + }, + "Activite": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour de l'activité", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeActivite": { + "type": "string", + "description": "Le type d'activité (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "ROME" + }, + "codeActivite": { + "type": "string", + "description": "Le code d'activité (voir le référentiel Activite pour les codes disponibles)", + "example": "K1303" + }, + "libelleActivite": { + "type": "string", + "description": "Le libellé de l'activité", + "example": "Ouvriers qualifiés de l'électricité et de l'électronique" + }, + "attribut": { + "type": "string", + "description": "Optionnel: le code NSF de l'activité", + "example": "114" + } + }, + "required": [ + "codeTypeActivite", + "codeActivite", + "libelleActivite" + ] + }, + "ListeActivite": { + "type": "object", + "properties": { + "activites": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Activite" + } + } + } + }, + "ListeTypeActivite": { + "type": "object", + "properties": { + "typeActivites": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeActivite" + } + } + } + }, + "TypeActivite": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour du type d'activité", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeActivite": { + "type": "string", + "description": "Le code du type d'activité", + "example": "ROME" + }, + "libelleTypeActivite": { + "type": "string", + "description": "Le libellé du type d'activité", + "example": "Métier (ROME)" + } + } + }, + "ListeCaracteristique": { + "type": "object", + "properties": { + "caracteristiques": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Caracteristique" + } + } + } + }, + "ListeTypeCaracteristique": { + "type": "object", + "properties": { + "typeCaracteristiques": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeCaracteristique" + } + } + } + }, + "TypeCaracteristique": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour du type", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeCaracteristique": { + "type": "string", + "description": "Le code du type de la caractéristique", + "example": "AGC_RAT" + }, + "libelleTypeCaracteristique": { + "type": "string", + "description": "Le libellé du type de la caractéristique", + "example": "Territoire de rattachement de l'offre à l'agence" + } + } + }, + "ListeDetailIndicateur": { + "type": "object", + "properties": { + "listeIndicateurs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DetailIndicateur" + } + } + } + }, + "DetailIndicateur": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour de l'indicateur", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeIndicateur": { + "type": "string", + "description": "Le code de l'indicateur", + "example": "DE_1" + }, + "libelleIndicateur": { + "type": "string", + "description": "Le libellé de l'indicateur", + "example": "Nombre et % de DE par catégories x caractéristiques, % par activités (Rome, Compétence)" + }, + "descriptif": { + "type": "string", + "description": "Le descriptif de l'indicateur", + "example": "Définition détaillée : informations sur les sources de données utilisées, les méthodes de calcul, les limitations sur certains axes, les aspects réglementaires éventuels." + }, + "codeFamille": { + "type": "string", + "description": "Le code famille de l'indicateur", + "example": "DEMANDEURS" + }, + "disponibiliteIndicateur": { + "type": "integer", + "description": "Indique si l'indicateur est disponible (1) ou désactivé (0)", + "format": "int32", + "example": 1 + }, + "listeTypesValeurs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeValeur" + } + }, + "listeTypesTerritoiresIndicateur": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeTerritoire" + } + }, + "listeTypesActivitesIndicateur": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeActivite" + } + }, + "listeTypesPeriodesIndicateur": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypePeriodeIndicateur" + } + }, + "listeTypesNomenclaturesIndicateur": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeNomenclatureIndicateur" + } + }, + "listeCroisementsIndicateur": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CroisementIndicateur" + } + }, + "listeCaracteristiqueIndicateur": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CaracteristiqueIndicateur" + } + }, + "listeTypesCracteristiqueIndicateur": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeCaracteristique" + } + } + } + }, + "TypeValeur": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour du type de valeur", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "valeurPrincipale": { + "type": "string", + "description": "La valeur principale", + "example": "0" + }, + "codeTypeValeur": { + "type": "string", + "description": "Le code du type de valeur", + "example": "NB_ET_PCT" + }, + "numOrdre": { + "type": "integer", + "description": "Le numéro d'ordre de la valeur", + "format": "int32", + "example": 1 + }, + "libValeur": { + "type": "string", + "description": "Le libellé du type de valeur", + "example": "Nombre et % de répartition de ce nombre par caractéristiques." + }, + "libelleValeurSpecifique": { + "type": "string", + "description": "Le libellé spécifique de la valeur", + "example": "Nombre et % des retours à l'emploi AB par durée d'emploi et caractéristiques" + } + } + }, + "TypeTerritoire": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour du type de territoire", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeTerritoire": { + "type": "string", + "description": "Le code du type de territoire", + "example": "DEP" + }, + "libelleTypeTerritoire": { + "type": "string", + "description": "Le libellé du type de territoire", + "example": "Département" + } + } + }, + "TypePeriodeIndicateur": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour du type de période de l'indicateur", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypePeriode": { + "type": "string", + "description": "Le code du type de période", + "example": "TRIMESTRE" + }, + "libelleTypePeriode": { + "type": "string", + "description": "Le libellé du type de période", + "example": "Trimestre" + }, + "profondeurMax": { + "type": "string", + "description": "Nombre maximum de période interrogeable pour ce type", + "example": "12" + } + } + }, + "TypeNomenclatureIndicateur": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour du type de nomenclature de l'indicateur", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeNomenclature": { + "type": "string", + "description": "Le code du type de nomenclature de l'indicateur", + "example": "DUREEEMP" + }, + "libelleTypeNomenclature": { + "type": "string", + "description": "Le libellé du type de nomenclature de l'indicateur", + "example": "Durée d'emploi > 1 mois, emploi durable (> 6 mois), Toutes durées)" + }, + "listeValeursNomenclaturesIndicateur": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ValeurNomenclatureIndicateur" + } + } + } + }, + "ValeurNomenclatureIndicateur": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour de la valeur de la nomenclature", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "valeurNomenclature": { + "type": "string", + "description": "La valeur de la nomenclature", + "example": "SUP1M" + }, + "libelleNomenclature": { + "type": "string", + "description": "La libellé de la nomenclature", + "example": "Emploi > 1 mois" + } + } + }, + "CroisementIndicateur": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour du croisement de l'indicateur", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeTerritoire": { + "type": "string", + "description": "Le type de territoire (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "DEP" + }, + "codeTypeActivite": { + "type": "string", + "description": "Le type d'activité (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "ROME" + }, + "codeTypePeriode": { + "type": "string", + "description": "Le type de période (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "TRIMESTRE" + }, + "codeTypeNomenclature": { + "type": "string", + "description": "Le type de nomenclature (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "CATCAND" + }, + "codeNomenclature": { + "type": "string", + "description": "Le code de nomenclature", + "example": "A" + } + } + }, + "CaracteristiqueIndicateur": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour de la caractéristique de l'indicateur", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeCaracteristique": { + "type": "string", + "description": "Le code du type de la caractéristique", + "example": "GENRE" + }, + "codeCaracteristique": { + "type": "string", + "description": "Le code de la caractéristique", + "example": "H" + }, + "libelleCaracteristique": { + "type": "string", + "description": "Le libellé de la caractéristique", + "example": "Homme" + } + }, + "required": [ + "codeTypeCaracteristique", + "codeCaracteristique", + "libelleCaracteristique" + ] + }, + "ListeNomenclature": { + "type": "object", + "properties": { + "nomenclatures": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Nomenclature" + } + } + } + }, + "Nomenclature": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour de la nomenclature", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeNomenclature": { + "type": "string", + "description": "Le code du type de nomenclature", + "example": "ACCESEMP" + }, + "codeNomenclature": { + "type": "string", + "description": "Le code de la nomenclature", + "example": "12M" + }, + "libelleNomenclature": { + "type": "string", + "description": "Le libellé de la nomenclature", + "example": "12 Mois" + } + } + }, + "ListeTypeNomenclature": { + "type": "object", + "properties": { + "typeNomenclatures": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeNomenclature" + } + } + } + }, + "TypeNomenclature": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour du type de nomenclature", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeNomenclature": { + "type": "string", + "description": "Le code du type de nomenclature", + "example": "ACCESEMP" + }, + "libelleTypeNomenclature": { + "type": "string", + "description": "Le libellé du type de nomenclature", + "example": "Délai d'accès à l'emploi (6 mois / 12 mois)" + } + } + }, + "ListePeriode": { + "type": "object", + "properties": { + "periodes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Periode" + } + } + } + }, + "Periode": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour de la période", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypePeriode": { + "type": "string", + "description": "Le code du type de période", + "example": "TRIMESTRE" + }, + "codePeriode": { + "type": "string", + "description": "Le code de la période", + "example": "2023T1" + }, + "ordrePeriode": { + "type": "integer", + "description": "Ordre de la période", + "format": "int32", + "example": 1 + }, + "libellePeriode": { + "type": "string", + "description": "Libellé de la période", + "example": "1er trimestre 2023" + } + }, + "required": [ + "codeTypePeriode", + "codePeriode", + "ordrePeriode", + "libellePeriode" + ] + }, + "ListeTypePeriode": { + "type": "object", + "properties": { + "typePeriodes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypePeriode" + } + } + } + }, + "TypePeriode": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour du type de période", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypePeriode": { + "type": "string", + "description": "Le code du type de période", + "example": "TRIMESTRE" + }, + "libelleTypePeriode": { + "type": "string", + "description": "Le libellé du type de période", + "example": "Trimestre" + } + }, + "required": [ + "codeTypePeriode", + "libelleTypePeriode" + ] + }, + "ListeTerritoire": { + "type": "object", + "properties": { + "territoires": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Territoire" + } + } + } + }, + "Territoire": { + "type": "object", + "properties": { + "datMaj": { + "type": "string", + "description": "Date de mise à jour du territoire", + "format": "date-time", + "example": "2024-04-21T17:13:44+02:00" + }, + "codeTypeTerritoire": { + "type": "string", + "description": "Le type de territoire (voir le référentiel du Catalogue des Indicateurs pour les types disponibles)", + "example": "DEP" + }, + "codeTerritoire": { + "type": "string", + "description": "Le code du territoire (voir le référentiel Territoire pour les codes disponibles)", + "example": "33" + }, + "libelleTerritoire": { + "type": "string", + "description": "Le libellé du territoire", + "example": "GIRONDE" + }, + "codeTypeTerritoireParent": { + "type": "string", + "description": "Le code type du territoire parent", + "example": "REG" + }, + "codeTerritoireParent": { + "type": "string", + "description": "Le code du territoire parent", + "example": "75" + } + } + }, + "ListeTypeTerritoire": { + "type": "object", + "properties": { + "typeTerritoires": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeTerritoire" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/backend/core/config.py b/backend/core/config.py index 0196082..03d73cf 100644 --- a/backend/core/config.py +++ b/backend/core/config.py @@ -13,7 +13,7 @@ class Settings(BaseSettings): MISTRAL_API_KEY: Optional[str] = None GEMINI_API_KEY: Optional[str] = None LLM_PROVIDER: str = "gemini" # Votre choix par défaut - + UPLOAD_DIRECTORY: str = "./uploads" # Exemple : un dossier 'uploads' à la racine de votre backend GEMINI_MODEL_NAME: Optional[str] = "gemini-1.5-flash" # Ou le nom de modèle Gemini que vous utilisez MISTRAL_MODEL_NAME: Optional[str] = "mistral-tiny" # Ou le nom de modèle Mistral par défaut si vous l'utilisez @@ -23,11 +23,10 @@ class Settings(BaseSettings): FRANCE_TRAVAIL_TOKEN_URL: str = "https://francetravail.io/connexion/oauth2/access_token?realm=%2Fpartenaire" FRANCE_TRAVAIL_API_BASE_URL: str = "https://api.francetravail.io/partenaire/offresdemploi" FRANCE_TRAVAIL_ROMEO_API_URL: str = "https://api.francetravail.io/partenaire/romeo/v2" - # Si vous avez un scope API par défaut pour les offres d'emploi, vous pouvez le spécifier ici, par exemple : - # FRANCE_TRAVAIL_OFFER_API_SCOPE: str = "api_offresdemploiv1" - + # AJOUT DE LA VARIABLE POUR LE SCOPE DE L'API OFFRES D'EMPLOI + FRANCE_TRAVAIL_OFFER_API_SCOPE: str = "api_offresdemploiv1" # C'est le scope commun pour l'API Offres d'emploi model_config = SettingsConfigDict(env_file=".env", extra="ignore") -# --- AJOUT CRUCIAL : Instanciation de l'objet settings --- +# --- INSTANCIATION DE L'OBJET settings --- settings = Settings() \ No newline at end of file diff --git a/backend/routers/ai.py b/backend/routers/ai.py index 9004d86..59bf70a 100644 --- a/backend/routers/ai.py +++ b/backend/routers/ai.py @@ -107,9 +107,14 @@ async def analyze_job_offer_and_cv_route( if not cv_document: raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="CV non trouvé ou non accessible par cet utilisateur.") - try: - # Utilise la nouvelle fonction d'extraction de texte + logger.info(f"Tentative d'extraction du texte du CV à partir de : {cv_document.filepath}") # AJOUTEZ CETTE + + # --- AJOUTEZ CES LIGNES DE DEBUG --- + logger.info(f"Texte extrait (début) du CV: '{cv_text_to_analyze[:100]}...'") # Affiche les 100 premiers caractères + logger.info(f"Longueur du texte extrait du CV (avant strip): {len(cv_text_to_analyze)}") + logger.info(f"Longueur du texte extrait du CV (après strip): {len(cv_text_to_analyze.strip())}") + # --- FIN DES LIGNES DE DEBUG --- cv_text_to_analyze = extract_text_from_file(cv_document.filepath) if not cv_text_to_analyze.strip(): # Vérifier après extraction si le contenu est vide raise ValueError("Le fichier CV est vide ou l'extraction de texte a échoué.") diff --git a/backend/routers/document.py b/backend/routers/document.py index 5e0599a..957bd4d 100644 --- a/backend/routers/document.py +++ b/backend/routers/document.py @@ -1,17 +1,23 @@ +# backend/routers/document.py + from fastapi import APIRouter, Depends, HTTPException, status, UploadFile, File from fastapi.responses import FileResponse from sqlalchemy.orm import Session import os -import uuid # Pour générer des noms de fichiers uniques +import uuid # For generating unique filenames +import logging +from typing import List # Required for list type hint in get_user_documents from core.database import get_db -from core.security import create_access_token # Non utilisé directement ici mais potentiellement dans d'autres routers -from core.config import settings # Pour accéder au chemin d'upload +# Removed unused 'create_access_token' +from core.security import get_current_user # Ensure this is the correct import for your get_current_user dependency +from core.config import settings # To access upload directory from crud import document as crud_document -from crud import user as crud_user # Pour récupérer l'utilisateur courant +# Removed unused 'crud_user' as it's not directly used in this router from schemas import document as schemas_document -from schemas import user as schemas_user # Pour le modèle UserInDBBase ou UserResponse -from dependencies import get_current_user # Pour la protection des routes +from schemas import user as schemas_user # For UserResponse schema + +logger = logging.getLogger(__name__) router = APIRouter( prefix="/documents", @@ -19,7 +25,7 @@ router = APIRouter( responses={404: {"description": "Not found"}}, ) -@router.post("/upload-cv", response_model=schemas_document.DocumentResponse, status_code=status.HTTP_201_CREATED) +@router.post("/upload-cv", response_model=schemas_document.DocumentResponse, status_code=status.HTTP_201_CREATED, summary="Uploader un CV") async def upload_cv( file: UploadFile = File(...), db: Session = Depends(get_db), @@ -29,39 +35,53 @@ async def upload_cv( Permet à un utilisateur authentifié d'uploader un CV. Le fichier est stocké sur le serveur et ses métadonnées sont enregistrées en base de données. """ - if not file.filename.lower().endswith(('.pdf', '.doc', '.docx')): + logger.info(f"Tentative d'upload de CV par l'utilisateur {current_user.id} - Nom du fichier: {file.filename}") + + if not file.filename: + raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Le nom du fichier est manquant.") + + allowed_extensions = ('.pdf', '.doc', '.docx') + # Use os.path.splitext to safely get the extension + file_extension = os.path.splitext(file.filename)[1].lower() + if file_extension not in allowed_extensions: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, - detail="Seuls les fichiers PDF, DOC, DOCX sont autorisés." + detail=f"Seuls les fichiers {', '.join(allowed_extensions).upper()} sont autorisés." ) - # Créer un nom de fichier unique pour éviter les collisions et les problèmes de sécurité - unique_filename = f"{uuid.uuid4()}_{file.filename}" - file_path = os.path.join(settings.UPLOADS_DIR, unique_filename) + upload_dir = settings.UPLOADS_DIR # Utilisez le chemin absolu configuré dans settings + os.makedirs(upload_dir, exist_ok=True) - # S'assurer que le répertoire d'uploads existe - os.makedirs(settings.UPLOADS_DIR, exist_ok=True) + # Generate a unique filename using UUID to prevent collisions and potential path traversal issues + unique_filename = f"{uuid.uuid4()}{file_extension}" + file_path = os.path.join(upload_dir, unique_filename) try: + # Write the file in chunks for efficiency with large files with open(file_path, "wb") as buffer: - # Écrit le fichier par morceaux pour les gros fichiers - while content := await file.read(1024 * 1024): # Lire par blocs de 1MB + while content := await file.read(1024 * 1024): # Read in 1MB chunks buffer.write(content) + logger.info(f"Fichier '{file.filename}' enregistré sous '{file_path}' pour l'utilisateur {current_user.id}") except Exception as e: + logger.error(f"Erreur lors de l'enregistrement du fichier {file.filename}: {e}", exc_info=True) raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"Erreur lors de l'enregistrement du fichier: {e}" ) finally: + # Ensure the UploadFile is closed even if an error occurs await file.close() - # Enregistrer les métadonnées du document dans la base de données + # Save document metadata in the database + # The DocumentCreate schema might not need 'filename' as a field if you pass it directly to crud + # Assuming DocumentCreate schema only takes filename and crud.create_document handles filepath document_data = schemas_document.DocumentCreate(filename=file.filename) db_document = crud_document.create_document(db, document_data, file_path, current_user.id) + logger.info(f"Document ID {db_document.id} créé en base de données pour l'utilisateur {current_user.id}") return db_document -@router.get("/", response_model=list[schemas_document.DocumentResponse]) +@router.get("/", response_model=List[schemas_document.DocumentResponse], summary="Lister les documents de l'utilisateur") def get_user_documents( db: Session = Depends(get_db), current_user: schemas_user.UserResponse = Depends(get_current_user) @@ -69,26 +89,34 @@ def get_user_documents( """ Récupère tous les documents uploadés par l'utilisateur authentifié. """ + logger.info(f"Tentative de listage des documents pour l'utilisateur {current_user.id}") documents = crud_document.get_documents_by_owner(db, current_user.id) return documents -@router.get("/{document_id}", response_model=schemas_document.DocumentResponse) +@router.get("/{document_id}", response_model=schemas_document.DocumentResponse, summary="Récupérer un document par ID") def get_document_details( document_id: int, db: Session = Depends(get_db), current_user: schemas_user.UserResponse = Depends(get_current_user) ): """ - Récupère les détails d'un document spécifique de l'utilisateur authentifié. + Récupère les détails d'un document spécifique appartenant à l'utilisateur courant. """ - document = crud_document.get_document_by_id(db, document_id) + logger.info(f"Tentative de récupération du document {document_id} pour l'utilisateur {current_user.id}") + + # Appel à la fonction CRUD qui filtre déjà par owner_id + document = crud_document.get_document_by_id(db, document_id, current_user.id) + if not document: - raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Document non trouvé.") - if document.owner_id != current_user.id: - raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Vous n'avez pas accès à ce document.") + # Si le document n'est pas trouvé (soit il n'existe pas, soit il n'appartient pas à cet utilisateur) + logger.warning(f"Document {document_id} non trouvé ou non autorisé pour l'utilisateur {current_user.id}") + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail="Document non trouvé ou vous n'avez pas l'autorisation d'y accéder." + ) return document -@router.delete("/{document_id}", status_code=status.HTTP_204_NO_CONTENT) +@router.delete("/{document_id}", status_code=status.HTTP_204_NO_CONTENT, summary="Supprimer un document par ID") async def delete_document( document_id: int, db: Session = Depends(get_db), @@ -98,22 +126,62 @@ async def delete_document( Supprime un document spécifique de l'utilisateur authentifié, à la fois de la base de données et du système de fichiers. """ - db_document = crud_document.get_document_by_id(db, document_id) - if not db_document: - raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Document non trouvé.") - if db_document.owner_id != current_user.id: - raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Vous n'avez pas la permission de supprimer ce document.") + logger.info(f"Tentative de suppression du document {document_id} pour l'utilisateur {current_user.id}") - # Supprimer le fichier du système de fichiers - if os.path.exists(db_document.filepath): + # Appel à la fonction CRUD qui filtre déjà par owner_id + db_document = crud_document.get_document_by_id(db, document_id, current_user.id) + + if not db_document: + # Si le document n'est pas trouvé (soit il n'existe pas, soit il n'appartient pas à cet utilisateur) + logger.warning(f"Document {document_id} non trouvé ou non autorisé pour la suppression par l'utilisateur {current_user.id}") + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail="Document non trouvé ou vous n'avez pas la permission de le supprimer." + ) + + # Supprimer le fichier du système de fichiers s'il existe et si un chemin est défini + if db_document.filepath and os.path.exists(db_document.filepath): try: os.remove(db_document.filepath) + logger.info(f"Fichier physique '{db_document.filepath}' supprimé pour le document {document_id}.") except OSError as e: + logger.error(f"Erreur lors de la suppression du fichier physique '{db_document.filepath}' pour le document {document_id}: {e}", exc_info=True) raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"Erreur lors de la suppression du fichier sur le serveur: {e}" ) + else: + logger.warning(f"Le document {document_id} n'a pas de chemin de fichier ou le fichier n'existe pas: {db_document.filepath}") # Supprimer l'entrée de la base de données - crud_document.delete_document(db, document_id) - return {"message": "Document supprimé avec succès."} + success = crud_document.delete_document(db, document_id) + if not success: + logger.error(f"Échec de la suppression de l'entrée du document {document_id} de la base de données.") + raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Échec de la suppression du document de la base de données.") + + logger.info(f"Document {document_id} et son fichier physique supprimés avec succès pour l'utilisateur {current_user.id}.") + return {} # 204 No Content typically returns an empty body + +# Optional: Add a route to download the actual file if needed +@router.get("/{document_id}/download", summary="Télécharger un document") +async def download_document( + document_id: int, + db: Session = Depends(get_db), + current_user: schemas_user.UserResponse = Depends(get_current_user) +): + """ + Permet à l'utilisateur authentifié de télécharger un de ses documents. + """ + logger.info(f"Tentative de téléchargement du document {document_id} par l'utilisateur {current_user.id}") + + db_document = crud_document.get_document_by_id(db, document_id, current_user.id) + if not db_document: + logger.warning(f"Document {document_id} non trouvé ou non autorisé pour le téléchargement par l'utilisateur {current_user.id}") + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Document non trouvé ou non autorisé.") + + if not os.path.exists(db_document.filepath): + logger.error(f"Fichier physique non trouvé pour le document {document_id} à l'emplacement: {db_document.filepath}") + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Fichier physique non trouvé sur le serveur.") + + # Return the file as a FastAPI FileResponse + return FileResponse(path=db_document.filepath, filename=db_document.filename, media_type="application/octet-stream") \ No newline at end of file diff --git a/backend/routers/france_travail_offers.py b/backend/routers/france_travail_offers.py index 8efd640..b620801 100644 --- a/backend/routers/france_travail_offers.py +++ b/backend/routers/france_travail_offers.py @@ -1,73 +1,62 @@ -# backend/routers/france_travail_offers.py +import logging from typing import List, Optional from fastapi import APIRouter, Depends, HTTPException, status, Query from services.france_travail_offer_service import france_travail_offer_service -from core.security import get_current_user -from models.user import User +# Assuming these imports are still needed for your project context, +# even if not directly used in the current problem scope. +# from core.security import get_current_user +# from models.user import User from schemas.france_travail import FranceTravailSearchResponse, OffreDetail, Offre -import logging - router = APIRouter() logger = logging.getLogger(__name__) @router.get("/search", response_model=FranceTravailSearchResponse) async def search_france_travail_offers( motsCles: Optional[str] = Query(None, description="Mots-clés de recherche (ex: 'développeur full stack')"), - commune_nom_ou_code: Optional[str] = Query(None, alias="commune", description="Nom, code postal ou code INSEE de la commune"), - distance: Optional[int] = Query(10, description="Distance maximale en km autour de la commune"), + commune_input: Optional[str] = Query(None, alias="commune", description="Nom de la commune (ex: 'Paris', 'Marseille'). Si spécifié, le code départemental sera automatiquement dérivé."), + distance: Optional[int] = Query(10, description="Distance maximale en km autour de la commune ou du code postal. Applicable avec 'commune' ou 'codePostal', 'latitude'/'longitude'."), + codePostal: Optional[str] = Query(None, description="Code postal spécifique (ex: '75001')"), + latitude: Optional[float] = Query(None, description="Latitude du point de recherche (ex: 48.8566)"), + longitude: Optional[float] = Query(None, description="Longitude du point de recherche (ex: 2.3522)"), + # codeDepartement: Optional[str] = Query(None, description="Code départemental sur 2 chiffres (ex: '75' pour Paris). Prioritaire sur les autres paramètres de localisation."), # Ce paramètre est maintenant géré en interne par le service page: int = Query(0, description="Numéro de la page de résultats (commence à 0)"), - limit: int = Query(15, description="Nombre d'offres par page (max 100 pour l'API France Travail)"), # Max 100 est une limite courante pour une seule requête à l'API FT - contrat: Optional[str] = Query(None, description="Type de contrat (ex: 'CDI', 'CDD', 'MIS')"), - experience: Optional[str] = Query(None, description="Niveau d'expérience (ex: '1' pour débutant, '2' pour 1-3 ans, '3' pour >3 ans)"), - current_user: User = Depends(get_current_user) + limit: int = Query(15, description="Nombre d'offres par page (max 100 pour l'API France Travail)"), + contrat: Optional[str] = Query(None, description="Type de contrat (ex: 'CDI', 'CDD', 'MIS'). Plusieurs séparés par des virgules."), + experience: Optional[str] = Query(None, description="Niveau d'expérience (ex: 'E' pour expérimenté, 'D' pour débutant). Plusieurs séparés par des virgules.") + # current_user: User = Depends(get_current_user) # Décommentez si l'authentification est nécessaire ): """ Recherche des offres d'emploi via l'API France Travail. - Convertit le nom de ville en code INSEE si nécessaire et gère la pagination. - Nécessite une authentification. + La localisation peut être spécifiée par commune (le département sera dérivé), code postal, ou latitude/longitude. """ - if limit > 100: # La limite de l'API France Travail pour 'range' est souvent 150 ou 100 items par requête. - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail="La limite de résultats par page ne peut pas dépasser 100 pour une seule requête API." - ) + logger.info(f"Requête de recherche d'offres reçue: motsCles='{motsCles}', commune_input='{commune_input}', codePostal='{codePostal}', latitude='{latitude}', longitude='{longitude}', distance={distance}, page={page}, limit={limit}") - commune_param_for_api = None + range_start = page * limit + range_end = range_start + limit - 1 + logger.info(f"Paramètre 'range' calculé pour l'API France Travail: {range_start}-{range_end}") - if commune_nom_ou_code: - if commune_nom_ou_code.isdigit() and len(commune_nom_ou_code) == 5: - commune_param_for_api = commune_nom_ou_code - logger.info(f"Recherche par code postal: {commune_nom_ou_code}") - else: - logger.info(f"Tentative de récupération du code INSEE pour la ville: {commune_nom_ou_code}") - insee_code = await france_travail_offer_service.get_insee_code_for_commune(commune_nom_ou_code) - if not insee_code: - raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, - detail=f"Code INSEE non trouvé pour la ville '{commune_nom_ou_code}'. Veuillez vérifier l'orthographe ou utiliser un code postal." - ) - commune_param_for_api = insee_code - logger.info(f"Code INSEE '{insee_code}' trouvé pour '{commune_nom_ou_code}'.") + # Convertir les chaînes de contrats et expériences en listes + contrats_list = contrat.split(',') if contrat else None + experiences_list = experience.split(',') if experience else None + + # Les paramètres de localisation sont passés directement au service, + # qui gérera la dérivation du département et la priorité. - if (commune_param_for_api is not None) and (distance is None): - distance = 10 - - # Calcul du paramètre 'range' pour l'API France Travail - start_index = page * limit - end_index = start_index + limit - 1 - api_range_param = f"{start_index}-{end_index}" - logger.info(f"Paramètre 'range' calculé pour l'API France Travail: {api_range_param}") - try: response = await france_travail_offer_service.search_offers( motsCles=motsCles, - commune=commune_param_for_api, + commune=commune_input, # Passe le nom de la commune directement + codePostal=codePostal, + latitude=latitude, + longitude=longitude, distance=distance, - range=api_range_param, # On passe le 'range' calculé - typeContrat=contrat, - # experience=experience # Vérifiez si ce paramètre est géré par l'API France Travail ou doit être mappé + # codeDepartement n'est plus passé ici, il est dérivé dans le service + range_start=range_start, + range_end=range_end, + typeContrat=contrats_list, + experience=experiences_list ) return response except RuntimeError as e: @@ -80,7 +69,7 @@ async def search_france_travail_offers( @router.get("/{offer_id}", response_model=OffreDetail) async def get_france_travail_offer_details( offer_id: str, - current_user: User = Depends(get_current_user) + # current_user: User = Depends(get_current_user) ): """ Récupère les détails d'une offre d'emploi spécifique de l'API France Travail par son ID. @@ -93,5 +82,5 @@ async def get_france_travail_offer_details( logger.error(f"Erreur lors de la récupération des détails de l'offre {offer_id} de France Travail: {e}") raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=f"Impossible de récupérer les détails de l'offre: {e}" - ) \ No newline at end of file + detail=f"Impossible de récupérer les détails de l'offre {offer_id}: {e}" + ) \ No newline at end of file diff --git a/backend/schemas/france_travail.py b/backend/schemas/france_travail.py index 51f34cf..8c44e87 100644 --- a/backend/schemas/france_travail.py +++ b/backend/schemas/france_travail.py @@ -59,7 +59,7 @@ class Offre(BaseModel): id: str = Field(..., example="1234567") intitule: str = Field(..., example="Développeur Full Stack") description: Optional[str] = None - dateCreation: datetime + dateActualisation: Optional[datetime] = Field(None, example="2024-01-15T10:00:00.000Z") dateActualisation: datetime lieuTravail: Optional[LieuTravail] = None typeContrat: Optional[Union[TypeContrat, str]] = None @@ -81,7 +81,6 @@ class Offre(BaseModel): class Config: from_attributes = True - # AJOUTEZ CETTE PROPRIÉTÉ CALCULÉE @computed_field def url_francetravail(self) -> str: """Génère l'URL de l'offre sur le site candidat.francetravail.fr.""" diff --git a/backend/services/ai_service.py b/backend/services/ai_service.py index 8d9e8b7..cc0ecf8 100644 --- a/backend/services/ai_service.py +++ b/backend/services/ai_service.py @@ -1,11 +1,12 @@ import json import logging import sys -from typing import Optional, Dict, Any +from typing import Optional, Dict, Any, List + +import google.genai as genai +# CORRECTION ICI : Importez explicitement HarmCategory et HarmBlockThreshold +from google.genai import types, HarmCategory, HarmBlockThreshold # Pour accéder à GenerationConfig, HarmCategory, HarmBlockThreshold -# MODIFIÉ ICI: Importations pour google-genai -from google import genai -from google.genai import types # Nécessaire pour configurer les types comme GenerateContentConfig import mistralai from mistralai.client import MistralClient @@ -13,6 +14,7 @@ from fastapi import HTTPException, status import anyio from core.config import settings +from services.romeo_service import romeo_service # Assurez-vous que ce service existe et est configuré logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) @@ -29,140 +31,208 @@ try: except Exception as e: logger.error(f"Error during mistralai debug info collection: {e}") - class AIService: def __init__(self): self.provider = settings.LLM_PROVIDER self.model_name = settings.GEMINI_MODEL_NAME if self.provider == "gemini" else settings.MISTRAL_MODEL_NAME + + self.client = None # Initialise le client à None + self.model = None # Initialise l'instance du modèle à None + + # S'assurer que generation_config et safety_settings sont toujours définis + self.generation_config = types.GenerationConfig( + candidate_count=1, + max_output_tokens=2048, + temperature=0.7, + top_k=40, + top_p=0.95 + ) + self.safety_settings = [ + {"category": HarmCategory.HARM_CATEGORY_HARASSMENT, "threshold": HarmBlockThreshold.BLOCK_NONE}, + {"category": HarmCategory.HARM_CATEGORY_HATE_SPEECH, "threshold": HarmBlockThreshold.BLOCK_NONE}, + {"category": HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT, "threshold": HarmBlockThreshold.BLOCK_NONE}, + {"category": HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT, "threshold": HarmBlockThreshold.BLOCK_NONE}, + ] if self.provider == "gemini": - try: - # Initialisation du client genai.Client() - self.client = genai.Client( - api_key=settings.GEMINI_API_KEY - ) - logger.info(f"Client Gemini genai.Client() initialisé.") - - # Configuration de la génération avec types.GenerateContentConfig - self.gemini_config = types.GenerateContentConfig( - temperature=0.7, - top_p=1.0, - top_k=1, - safety_settings=[ - types.SafetySetting(category="HARM_CATEGORY_HARASSMENT", threshold="BLOCK_NONE"), - types.SafetySetting(category="HARM_CATEGORY_HATE_SPEECH", threshold="BLOCK_NONE"), - types.SafetySetting(category="HARM_CATEGORY_SEXUALLY_EXPLICIT", threshold="BLOCK_NONE"), - types.SafetySetting(category="HARM_CATEGORY_DANGEROUS_CONTENT", threshold="BLOCK_NONE"), - ] - ) - logger.info(f"Configuration Gemini types.GenerateContentConfig créée.") - - - except Exception as e: - logger.error(f"Erreur d'initialisation du client Gemini: {e}") - raise ValueError(f"Impossible d'initialiser le client Gemini. Vérifiez votre GEMINI_API_KEY. Erreur: {e}") - + if not settings.GEMINI_API_KEY: + raise ValueError("GEMINI_API_KEY n'est pas configurée.") + genai.configure(api_key=settings.GEMINI_API_KEY) + self.client = genai # Ceci est l'API de base + # Créez une instance de modèle spécifique sur laquelle appeler generate_content_async + self.model = genai.GenerativeModel(self.model_name, generation_config=self.generation_config) elif self.provider == "mistral": if not settings.MISTRAL_API_KEY: - raise ValueError("MISTRAL_API_KEY n'est pas configurée dans les paramètres.") + raise ValueError("MISTRAL_API_KEY n'est pas configurée.") + # Initialize Mistral client self.client = MistralClient(api_key=settings.MISTRAL_API_KEY) + # Pour Mistral, le client est directement l'objet qui appelle le chat, pas un modèle séparé comme pour Gemini. + # Gardez self.model à None ou à une valeur non utilisée si vous ne l'utilisez pas avec Mistral. else: - raise ValueError(f"Fournisseur LLM non supporté: {self.provider}") + raise ValueError(f"Fournisseur LLM inconnu: {self.provider}") - logger.info(f"AI Service initialized with Provider: {self.provider}, Model: {self.model_name}") + async def _call_gemini_api(self, prompt: str) -> str: + try: + # CORRECTION ICI: Utilisez self.model pour appeler generate_content_async + if not self.model: # Ajout d'une vérification pour s'assurer que le modèle est initialisé + raise ValueError("Le modèle Gemini n'a pas été correctement initialisé.") + response = await self.model.generate_content_async( + prompt, + generation_config=self.generation_config, + safety_settings=self.safety_settings + ) + return response.text + except Exception as e: + logger.error(f"Erreur lors de l'appel à Gemini: {e}") + raise RuntimeError(f"Erreur lors de l'appel à Gemini: {e}") - async def analyze_job_offer_and_cv(self, job_offer_text: str, cv_text: str) -> Dict[str, Any]: + async def _call_mistral_api(self, prompt: str) -> str: + try: + # Assurez-vous que self.client est bien un MistralClient + if not isinstance(self.client, MistralClient): + raise TypeError("Le client Mistral n'est pas correctement initialisé.") + + response = self.client.chat( + model=self.model_name, + messages=[{"role": "user", "content": prompt}], + temperature=self.generation_config.temperature, + max_tokens=self.generation_config.max_output_tokens, + ) + return response.choices[0].message.content + except Exception as e: + logger.error(f"Erreur lors de l'appel à Mistral: {e}") + raise RuntimeError(f"Erreur lors de l'appel à Mistral: {e}") + + async def analyze_job_offer_and_cv( + self, job_offer_text: str, cv_text: str + ) -> Dict[str, Any]: prompt = f""" - En tant qu'assistant spécialisé dans la rédaction de CV et de lettres de motivation, votre tâche est d'analyser une offre d'emploi et un CV fournis, puis de : - 1. Calculer un score de pertinence entre 0 et 100 indiquant à quel point le CV correspond à l'offre. - 2. Identifier les 3 à 5 points forts du CV en relation avec l'offre. - 3. Suggérer 3 à 5 améliorations clés pour le CV afin de mieux correspondre à l'offre. - 4. Proposer une brève phrase d'accroche pour une lettre de motivation, personnalisée pour cette offre et ce CV. - 5. Identifier 3 à 5 mots-clés ou phrases importants de l'offre d'emploi que l'on devrait retrouver dans le CV. + En tant qu'expert en recrutement, j'ai besoin d'une analyse comparative détaillée entre une offre d'emploi et un CV. + L'analyse doit identifier les correspondances, les lacunes et les suggestions d'amélioration pour le CV, en vue de maximiser les chances d'obtenir le poste. - L'offre d'emploi est la suivante : + Voici l'offre d'emploi : --- {job_offer_text} --- - Le CV est le suivant : + Voici le CV : --- {cv_text} --- - Veuillez retourner votre analyse au format JSON, en respectant la structure suivante : + Veuillez fournir l'analyse dans le format JSON suivant, en vous assurant que tous les champs sont présents et remplis : + + ```json {{ - "score_pertinence": int, - "points_forts": ["string", "string", ...], - "ameliorations_cv": ["string", "string", ...], - "phrase_accroche_lm": "string", - "mots_cles_offre": ["string", "string", ...] + "match_score": "Score de correspondance global (sur 100).", + "correspondances": [ + {{ + "categorie": "Catégorie de correspondance (ex: 'Compétences techniques', 'Expérience', 'Qualités personnelles', 'Mots-clés')", + "elements": ["Liste des éléments correspondants trouvés dans l'offre et le CV."] + }} + ], + "lacunes": [ + {{ + "categorie": "Catégorie de lacune (ex: 'Compétences manquantes', 'Expérience insuffisante', 'Mots-clés absents')", + "elements": ["Liste des éléments de l'offre d'emploi qui ne sont pas (ou peu) présents dans le CV."] + }} + ], + "suggestions_cv": [ + "Suggestions spécifiques pour améliorer le CV afin de mieux correspondre à l'offre (ex: 'Ajouter des détails sur...', 'Mettre en avant l'expérience en...', 'Inclure le mot-clé...')." + ], + "qualites_perso_identifiees": ["Liste des qualités personnelles déduites du CV."], + "mots_cles_pertinents_offre": ["Liste des mots-clés importants identifiés dans l'offre d'emploi."], + "metiers_rome_suggeres_offre": [], + "competences_rome_suggeres_offre": [], + "analyse_detaillee": "Une analyse narrative plus approfondie des points forts et faibles du CV par rapport à l'offre, et un résumé général." }} + ``` + Assurez-vous que la réponse est un JSON valide et complet. Ne pas inclure de texte explicatif avant ou après le bloc JSON. """ + + logger.info(f"Envoi du prompt au LLM ({self.provider}): \n {prompt[:200]}...") # Log des 200 premiers caractères du prompt response_content = "" - if self.provider == "gemini": - try: - # MODIFIÉ ICI: Utilisation d'une lambda pour envelopper l'appel à generate_content - # avec tous ses arguments, pour que run_sync reçoive une fonction sans arguments supplémentaires - response = await anyio.to_thread.run_sync( - lambda: self.client.models.generate_content( - model=self.model_name, - contents=[{"role": "user", "parts": [{"text": prompt}]}], - config=self.gemini_config, - ) - ) - response_content = response.text - - # Nettoyage de la réponse pour retirer les blocs de code Markdown - if response_content.startswith("```json") and response_content.endswith("```"): - response_content = response_content[len("```json"): -len("```")].strip() - elif response_content.startswith("```") and response_content.endswith("```"): - response_content = response_content[len("```"): -len("```")].strip() - - - except Exception as e: - logger.error(f"Erreur lors de l'appel à Gemini: {e}") - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=f"Erreur lors de l'appel à l'API Gemini: {e}" - ) - elif self.provider == "mistral": - if not settings.MISTRAL_API_KEY: - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail="La clé API Mistral n'est pas configurée." - ) - try: - response = await self.client.chat_async( - model=self.model_name, - messages=[{"role": "user", "content": prompt}], - temperature=0.7, - max_tokens=1000 - ) - response_content = response.choices[0].message.content - - except Exception as e: - logger.error(f"Erreur lors de l'appel à Mistral: {e}") - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=f"Erreur lors de l'appel à l'API Mistral: {e}" - ) - else: - raise ValueError(f"Fournisseur LLM non supporté: {self.provider}") - - logger.info(f"Réponse brute de l'IA (après nettoyage si nécessaire) ({self.provider}): {response_content}") - try: - parsed_response = json.loads(response_content) - return parsed_response - except json.JSONDecodeError as e: - logger.error(f"Erreur de décodage JSON de la réponse IA ({self.provider}): {e}") - logger.error(f"Contenu non-JSON reçu (après nettoyage): {response_content}") + if self.provider == "gemini": + response_content = await self._call_gemini_api(prompt) + elif self.provider == "mistral": + response_content = await self._call_mistral_api(prompt) + else: + raise ValueError("Fournisseur LLM non supporté.") + except Exception as e: + logger.error(f"Échec de l'appel au service LLM: {e}") raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail="La réponse de l'IA n'était pas au format JSON attendu." + detail=f"Erreur lors de l'appel au service LLM: {e}" ) -# Instanciation unique du service AI + try: + # Gemini renvoie parfois du Markdown, donc on extrait le JSON + if self.provider == "gemini" and "```json" in response_content: + json_start = response_content.find("```json") + len("```json") + json_end = response_content.find("```", json_start) + if json_end != -1: + json_str = response_content[json_start:json_end].strip() + else: + json_str = response_content[json_start:].strip() + else: + json_str = response_content.strip() + + analysis_result = json.loads(json_str) + logger.info("Réponse JSON du LLM parsée avec succès.") + except json.JSONDecodeError as e: + logger.error(f"Erreur de parsing JSON depuis la réponse du LLM: {e}. Réponse brute: {response_content}") + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Erreur de format de réponse du LLM. Impossible de parser le JSON." + ) + except Exception as e: + logger.error(f"Erreur inattendue lors du traitement de la réponse LLM: {e}. Réponse brute: {response_content}") + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Erreur inattendue lors du traitement de la réponse LLM: {e}" + ) + + # Intégration du service Romeo + try: + logger.info("Début de l'intégration avec le service Romeo...") + # S'assurer que les textes ne sont pas None avant de les passer à Romeo + job_offer_text_for_romeo = job_offer_text if job_offer_text is not None else "" + cv_text_for_romeo = cv_text if cv_text is not None else "" + + # Appels aux services Romeo + # romeo_metiers_predictions = await romeo_service.predict_metiers(job_offer_text_for_romeo) + # romeo_competences_predictions = await romeo_service.predict_competences(job_offer_text_for_romeo) + + # NOTE: Les appels Romeo sont mis en commentaire car vous pourriez vouloir les activer sélectivement + # ou les décommenter une fois que la base d'analyse LLM est stable. + # Si vous utilisez romeo_service, assurez-vous qu'il est correctement initialisé et accessible. + + # Exemple de comment les utiliser si activé: + # Extraction des codes ROME (par exemple, 'D1101') des prédictions métiers + # et des codes de compétences ROME (par exemple, 'G1601') des prédictions de compétences + # predicted_rome_metiers = [ + # m["codeRome"] for m in romeo_metiers_predictions if "codeRome" in m + # ] if romeo_metiers_predictions else [] + # predicted_rome_competences = [ + # c["codeAppellation"] for c in romeo_competences_predictions if "codeAppellation" in c + # ] if romeo_competences_predictions else [] + + # Utiliser ces prédictions de Romeo pour mettre à jour le résultat de l'analyse + # analysis_result["metiers_rome_suggeres_offre"] = list(set(predicted_rome_metiers)) # Utilise set pour éviter les doublons + # analysis_result["competences_rome_suggeres_offre"] = list(set(predicted_rome_competences)) # Utilise set pour éviter les doublons + + logger.info("Intégration Romeo terminée avec succès (ou ignorée si en commentaire).") + + except Exception as e: + logger.error(f"Erreur lors de l'intégration avec le service Romeo: {e}") + # Ne pas relancer une HTTPException ici si l'intégration Romeo est optionnelle ou en cours de développement, + # car cela masquerait l'analyse LLM. Vous pouvez choisir de logguer et continuer, ou de relancer si c'est critique. + # Pour l'instant, on se contente de logguer l'erreur. + pass + + return analysis_result + +# Instanciation unique du service AI... ai_service = AIService() \ No newline at end of file diff --git a/backend/services/france_travail_auth_service.py b/backend/services/france_travail_auth_service.py index 9582dc7..812a56b 100644 --- a/backend/services/france_travail_auth_service.py +++ b/backend/services/france_travail_auth_service.py @@ -2,7 +2,7 @@ import httpx import logging from core.config import settings - +from datetime import datetime, timedelta logger = logging.getLogger(__name__) class FranceTravailAuthService: @@ -16,12 +16,12 @@ class FranceTravailAuthService: async def get_access_token(self): # Vérifiez si le token est encore valide dans le cache - if self._token_cache and self._token_cache.get("expires_at", 0) > httpx._compat.current_time(): + if self._token_cache and self._token_cache.get("expires_at", 0) > datetime.now(): logger.info("Utilisation du token France Travail depuis le cache.") return self._token_cache["access_token"] logger.info("Obtention d'un nouveau token France Travail...") - token_url = settings.FRANCE_TRAVAIL_TOKEN_URL + token_url = settings.FRANCE_TRAVAIL_TOKEN_URL # C'est la ligne modifiée client_id = settings.FRANCE_TRAVAIL_CLIENT_ID client_secret = settings.FRANCE_TRAVAIL_CLIENT_SECRET scope = "o2dsoffre api_offresdemploiv2" # Assurez-vous que ces scopes sont activés pour votre application @@ -34,35 +34,36 @@ class FranceTravailAuthService: } headers = { - "Content-Type": "application/x-www-form-urlencoded" # C'est très important ! + "Content-Type": "application/x-www-form-urlencoded" } - try: - async with httpx.AsyncClient() as client: + async with httpx.AsyncClient() as client: + try: response = await client.post(token_url, data=data, headers=headers) response.raise_for_status() # Lève une exception pour les codes d'erreur HTTP - token_data = response.json() - access_token = token_data.get("access_token") - expires_in = token_data.get("expires_in") # Durée de validité en secondes + # DÉBUT DE LA CORRECTION : Ces lignes sont maintenant correctement indentées dans le bloc try + token_data = response.json() + access_token = token_data.get("access_token") + expires_in = token_data.get("expires_in") # Durée de validité en secondes - if not access_token: - raise ValueError("Le token d'accès n'a pas été trouvé dans la réponse de France Travail.") + if not access_token: + raise ValueError("Le token d'accès n'a pas été trouvé dans la réponse de France Travail.") - # Mettre à jour le cache - self._token_cache = { - "access_token": access_token, - "expires_at": httpx._compat.current_time() + expires_in - 60 # 60 secondes de marge de sécurité - } - logger.info("Nouveau token France Travail obtenu et mis en cache.") - return access_token - - except httpx.HTTPStatusError as e: - logger.error(f"Erreur HTTP lors de l'obtention du token France Travail: {e.response.status_code} - {e.response.text}") - # Re-raise une RuntimeError pour que le service appelant puisse la gérer - raise RuntimeError(f"Erreur d'authentification France Travail: {e.response.text}") - except Exception as e: - logger.error(f"Erreur inattendue lors de l'obtention du token France Travail: {e}") - raise RuntimeError(f"Erreur inattendue lors de l'obtention du token France Travail: {e}") + # Mettre à jour le cache + self._token_cache = { + "access_token": access_token, + "expires_at": datetime.now() + timedelta(seconds=expires_in - 60) # 60 secondes de marge de sécurité + } + logger.info("Nouveau token France Travail obtenu et mis en cache.") + return access_token + # FIN DE LA CORRECTION + except httpx.HTTPStatusError as e: + logger.error(f"Erreur HTTP lors de l'obtention du token France Travail: {e.response.status_code} - {e.response.text}") + # Re-raise une RuntimeError pour que le service appelant puisse la gérer + raise RuntimeError(f"Erreur d'authentification France Travail: {e.response.text}") + except Exception as e: + logger.error(f"Erreur inattendue lors de l'obtention du token France Travail: {e}") + raise RuntimeError(f"Erreur inattendue lors de l'obtention du token France Travail: {e}") france_travail_auth_service = FranceTravailAuthService() \ No newline at end of file diff --git a/backend/services/france_travail_offer_service.py b/backend/services/france_travail_offer_service.py index baa4a7f..cea4fbf 100644 --- a/backend/services/france_travail_offer_service.py +++ b/backend/services/france_travail_offer_service.py @@ -1,197 +1,225 @@ -# backend/services/france_travail_offer_service.py import httpx import logging -from datetime import datetime, timedelta -from typing import List, Optional, Dict, Any, Union +import time +from typing import Optional, Dict, Any, List, Tuple +import asyncio + from core.config import settings -from schemas.france_travail import FranceTravailSearchResponse, OffreDetail, Offre, TypeContrat +from schemas.france_travail import FranceTravailSearchResponse, OffreDetail logger = logging.getLogger(__name__) class FranceTravailOfferService: def __init__(self): - self.client_id = settings.FRANCE_TRAVAIL_CLIENT_ID - self.client_secret = settings.FRANCE_TRAVAIL_CLIENT_SECRET - self.token_url = settings.FRANCE_TRAVAIL_TOKEN_URL - self.api_base_url = settings.FRANCE_TRAVAIL_API_BASE_URL - self.api_scope = settings.FRANCE_TRAVAIL_API_SCOPE - self.access_token = None - self.token_expires_at = None + self.client = httpx.AsyncClient(base_url=settings.FRANCE_TRAVAIL_API_BASE_URL) + self.auth_client = httpx.AsyncClient(base_url=settings.FRANCE_TRAVAIL_TOKEN_URL.split('?')[0]) + self.token_info = {"token": None, "expires_at": 0} + self.geo_api_client = httpx.AsyncClient() # Client for geo.api.gouv.fr async def _get_access_token(self): - if self.access_token and self.token_expires_at and datetime.now() < self.token_expires_at: - logger.info("Réutilisation du token France Travail existant.") - return self.access_token + if self.token_info["token"] and self.token_info["expires_at"] > time.time() + 60: # Refresh 1 min before expiry + logger.info("Utilisation du token France Travail depuis le cache.") + return self.token_info["token"] - logger.info("Obtention d'un nouveau token d'accès France Travail...") - headers = { - "Content-Type": "application/x-www-form-urlencoded" - } - data = { - "grant_type": "client_credentials", - "client_id": self.client_id, - "client_secret": self.client_secret, - "scope": self.api_scope - } + logger.info("Obtention d'un nouveau token France Travail...") + try: + token_url_with_realm = settings.FRANCE_TRAVAIL_TOKEN_URL + response = await self.auth_client.post( + token_url_with_realm, + data={ + "grant_type": "client_credentials", + "client_id": settings.FRANCE_TRAVAIL_CLIENT_ID, + "client_secret": settings.FRANCE_TRAVAIL_CLIENT_SECRET, + "scope": "o2dsoffre api_offresdemploiv2" + } + ) + response.raise_for_status() + token_data = response.json() + self.token_info["token"] = token_data["access_token"] + self.token_info["expires_at"] = time.time() + token_data["expires_in"] + logger.info("Nouveau token France Travail obtenu et mis en cache.") + return self.token_info["token"] + except httpx.HTTPStatusError as e: + logger.error(f"Échec de l'obtention du token France Travail: {e.response.status_code} - {e.response.text}") + raise RuntimeError(f"Échec de l'obtention du token France Travail: {e.response.text}") + except httpx.RequestError as e: + logger.error(f"Erreur réseau lors de l'obtention du token France Travail: {e}") + raise RuntimeError(f"Erreur réseau lors de l'obtention du token France Travail: {e}") - async with httpx.AsyncClient() as client: - try: - response = await client.post(self.token_url, headers=headers, data=data) + async def get_insee_and_postal_code_for_commune(self, commune_name: str) -> Optional[Tuple[str, str, float, float]]: + logger.info(f"Début de la recherche Geo API pour: '{commune_name}'") + try: + # First, try exact match by name + geo_url_by_name = f"https://geo.api.gouv.fr/communes?nom={commune_name}&fields=codesPostaux,code,nom,centre&format=json&limit=5" + logger.info(f"Recherche par nom via API Geo.gouv.fr: {geo_url_by_name}") + response = await self.geo_api_client.get(geo_url_by_name) + response.raise_for_status() + communes = response.json() + + for commune in communes: + # Prioritize exact name match + if commune['nom'].lower() == commune_name.lower(): + insee_code = commune['code'] + postal_code = commune['codesPostaux'][0] if commune['codesPostaux'] else None + latitude = commune['centre']['coordinates'][1] + longitude = commune['centre']['coordinates'][0] + logger.info(f"Correspondance exacte par nom trouvée: INSEE='{insee_code}', CP='{postal_code}', Lat='{latitude}', Long='{longitude}' pour '{commune_name}'.") + return insee_code, postal_code, latitude, longitude + + # If no exact name match, try the first result if available + if communes: + commune = communes[0] + insee_code = commune['code'] + postal_code = commune['codesPostaux'][0] if commune['codesPostaux'] else None + latitude = commune['centre']['coordinates'][1] + longitude = commune['centre']['coordinates'][0] + logger.info(f"Aucune correspondance exacte par nom, première commune trouvée: INSEE='{insee_code}', CP='{postal_code}', Lat='{latitude}', Long='{longitude}' pour '{commune_name}'.") + return insee_code, postal_code, latitude, longitude + + # If not found by name, try by postal code if commune_name looks like a postal code + if commune_name.isdigit() and len(commune_name) == 5: + geo_url_by_cp = f"https://geo.api.gouv.fr/communes?codePostal={commune_name}&fields=codesPostaux,code,nom,centre&format=json&limit=1" + logger.info(f"Recherche par code postal via API Geo.gouv.fr: {geo_url_by_cp}") + response = await self.geo_api_client.get(geo_url_by_cp) response.raise_for_status() - token_data = response.json() - self.access_token = token_data["access_token"] - expires_in = token_data.get("expires_in", 1500) - self.token_expires_at = datetime.now() + timedelta(seconds=expires_in - 60) + communes_by_cp = response.json() + if communes_by_cp: + commune = communes_by_cp[0] + insee_code = commune['code'] + postal_code = commune['codesPostaux'][0] if commune['codesPostaux'] else None + latitude = commune['centre']['coordinates'][1] + longitude = commune['centre']['coordinates'][0] + logger.info(f"Correspondance par code postal trouvée: INSEE='{insee_code}', CP='{postal_code}', Lat='{latitude}', Long='{longitude}' pour code postal '{commune_name}'.") + return insee_code, postal_code, latitude, longitude - logger.info("Token France Travail obtenu avec succès.") - return self.access_token - except httpx.HTTPStatusError as e: - logger.error(f"Erreur HTTP lors de l'obtention du token France Travail: {e.response.status_code} - {e.response.text}") - raise RuntimeError(f"Échec de l'obtention du token France Travail: {e.response.text}") - except Exception as e: - logger.error(f"Erreur inattendue lors de l'obtention du token France Travail: {e}") - raise RuntimeError(f"Échec inattendu lors de l'obtention du token France Travail: {e}") + logger.warning(f"Aucune correspondance trouvée pour la commune/code postal: '{commune_name}' dans l'API Geo.gouv.fr.") + return None + except httpx.HTTPStatusError as e: + logger.error(f"Erreur HTTP lors de l'appel à l'API Geo.gouv.fr pour '{commune_name}': {e.response.status_code} - {e.response.text}") + return None + except httpx.RequestError as e: + logger.error(f"Erreur réseau lors de l'appel à l'API Geo.gouv.fr pour '{commune_name}': {e}") + return None - async def get_insee_code_for_commune(self, commune_name: str) -> Optional[str]: - """ - Récupère le code INSEE d'une commune à partir de son nom. - Recherche une correspondance exacte du libellé, ou un code spécifique pour Paris. - """ + async def search_offers( + self, + motsCles: Optional[str] = None, + commune: Optional[str] = None, # Reste le nom de la commune + codePostal: Optional[str] = None, + latitude: Optional[float] = None, + longitude: Optional[float] = None, + distance: Optional[int] = None, + # codeDepartement: Optional[str] = None, # Ce paramètre sera maintenant dérivé en interne + range_start: int = 0, + range_end: int = 14, + typeContrat: Optional[List[str]] = None, + experience: Optional[List[str]] = None + ) -> FranceTravailSearchResponse: token = await self._get_access_token() headers = { - "Accept": "application/json", - "Authorization": f"Bearer {token}" - } - params = { - "q": commune_name + "Authorization": f"Bearer {token}", + "Content-Type": "application/json" } - async with httpx.AsyncClient() as client: - try: - response = await client.get( - f"{self.api_base_url}/v2/referentiel/communes", - headers=headers, - params=params - ) - response.raise_for_status() - communes_data = response.json() - - found_code = None - normalized_input_name = commune_name.upper().strip() - - if communes_data and isinstance(communes_data, list): - for commune_info in communes_data: - if commune_info and "code" in commune_info and "libelle" in commune_info: - normalized_libelle = commune_info["libelle"].upper().strip() - - # Priorité 1: Recherche spécifique pour "PARIS" avec son code INSEE connu - if normalized_input_name == "PARIS" and commune_info["code"] == "75056": - found_code = commune_info["code"] - break - # Priorité 2: Correspondance exacte du libellé - elif normalized_libelle == normalized_input_name: - found_code = commune_info["code"] - break - # Priorité 3: Si c'est Paris, mais le libellé renvoyé n'est pas "PARIS" exactement, - # mais le code est le bon, on le prend quand même. - # Ceci peut arriver si l'API renvoie "Paris 01" par exemple. - elif normalized_input_name == "PARIS" and commune_info["code"] in ["75056", "75101", "75102", "75103", "75104", "75105", "75106", "75107", "75108", "75109", "75110", "75111", "75112", "75113", "75114", "75115", "75116", "75117", "75118", "75119", "75120"]: - # Note: Les codes 75101 à 75120 sont pour les arrondissements, mais l'API - # France Travail utilise souvent le 75056 pour "Paris" globalement. - # Cette condition est plus une sécurité, mais 75056 est la cible principale. - if commune_info["code"] == "75056": # On préfère le code global de Paris - found_code = commune_info["code"] - break - elif found_code is None: # Si on n'a pas encore trouvé 75056, on prend un arrondissement - found_code = commune_info["code"] # Conserver le code d'arrondissement si c'est le seul "Paris" trouvé - # Note: La logique ici est à affiner selon si vous voulez les arrondissements ou seulement le code global. - # Pour la plupart des cas, "75056" est suffisant. - - if found_code: - logger.info(f"Code INSEE pour '{commune_name}' trouvé : {found_code}") - return found_code - - logger.warning(f"Aucun code INSEE exact trouvé pour la commune '{commune_name}' parmi les résultats de l'API. Vérifiez l'orthographe.") - return None - except httpx.HTTPStatusError as e: - logger.error(f"Erreur HTTP lors de la récupération du code INSEE pour '{commune_name}': {e.response.status_code} - {e.response.text}") - return None - except Exception as e: - logger.error(f"Erreur inattendue lors de la récupération du code INSEE pour '{commune_name}': {e}") - return None - - async def search_offers(self, - motsCles: Optional[str] = None, - typeContrat: Optional[str] = None, - codePostal: Optional[str] = None, - commune: Optional[str] = None, - distance: Optional[int] = None, - alternance: Optional[bool] = None, - offresManagerees: Optional[bool] = None, - range: str = "0-14") -> FranceTravailSearchResponse: - token = await self._get_access_token() - headers = { - "Accept": "application/json", - "Authorization": f"Bearer {token}" - } - - params = { - "range": range, + params: Dict[str, Any] = { + "range": f"{range_start}-{range_end}" } if motsCles: params["motsCles"] = motsCles if typeContrat: - params["typeContrat"] = typeContrat - if alternance is not None: - params["alternance"] = str(alternance).lower() - if offresManagerees is not None: - params["offresManagerees"] = str(offresManagerees).lower() + params["typeContrat"] = ','.join(typeContrat) + if experience: + params["experience"] = ','.join(experience) - if codePostal: + # Logique de localisation améliorée + # insee_code = None # Non utilisé directement comme paramètre pour l'API France Travail + # postal_code_for_api = None # Non utilisé directement comme paramètre pour l'API France Travail + # latitude_for_api = None # Non utilisé directement comme paramètre pour l'API France Travail + # longitude_for_api = None # Non utilisé directement comme paramètre pour l'API France Travail + + # Le codeDepartement sera déterminé ici si une commune est fournie + derived_departement_code = None + + if commune: + logger.info(f"Traitement de la commune spécifiée: '{commune}' pour dériver le département.") + geo_data = await self.get_insee_and_postal_code_for_commune(commune) + if geo_data: + insee_code, postal_code_from_geo, latitude_from_geo, longitude_from_geo = geo_data + + # Dériver le code départemental du code postal ou INSEE + if postal_code_from_geo and len(postal_code_from_geo) >= 2: + derived_departement_code = postal_code_from_geo[:2] + # Cas spécifiques pour la Corse + if postal_code_from_geo.startswith('2A'): + derived_departement_code = '2A' + elif postal_code_from_geo.startswith('2B'): + derived_departement_code = '2B' + + logger.info(f"Département dérivé de '{commune}': {derived_departement_code}") + + # Si un département est dérivé, l'utiliser prioritairement + if derived_departement_code: + params["departement"] = derived_departement_code + logger.info(f"Paramètre 'departement' utilisé (dérivé de la commune): {derived_departement_code}") + elif latitude_from_geo and longitude_from_geo and distance is not None: + # Fallback sur latitude/longitude si la dérivation du département échoue + params["latitude"] = latitude_from_geo + params["longitude"] = longitude_from_geo + params["distance"] = distance + logger.info(f"Paramètres de localisation utilisés (dérivés de la commune): Latitude/Longitude et Distance: Lat={latitude_from_geo}, Long={longitude_from_geo}, Dist={distance}") + else: + logger.warning(f"Impossible de dériver le département ou d'obtenir des coordonnées valides pour la commune '{commune}'. Recherche sans localisation précise.") + else: + logger.warning(f"Impossible d'obtenir les données géographiques pour la commune '{commune}'. Recherche sans localisation précise.") + elif codePostal: params["codePostal"] = codePostal if distance is not None: params["distance"] = distance - else: - params["distance"] = 10 - elif commune: - params["commune"] = commune + logger.info(f"Paramètres de localisation utilisés: Code Postal={codePostal}, Distance={distance}") + elif latitude is not None and longitude is not None: + params["latitude"] = latitude + params["longitude"] = longitude if distance is not None: params["distance"] = distance + logger.info(f"Paramètres de localisation utilisés: Latitude/Longitude: Lat={latitude}, Long={longitude}, Dist={distance}") + else: + logger.warning("Aucun paramètre de localisation valide (commune, code postal, lat/long) n'a été spécifié. La recherche sera nationale.") + + + logger.info(f"Appel à l'API France Travail pour search_offers avec paramètres FINAUX: {params}") + try: + response = await self.client.get("/v2/offres/search", headers=headers, params=params) + response.raise_for_status() + logger.info(f"Réponse brute de l'API France Travail (search_offers): {response.json()}") + return FranceTravailSearchResponse(**response.json()) + except httpx.HTTPStatusError as e: + logger.error(f"Échec de la recherche d'offres France Travail: {e.response.status_code} - {e.response.text}") + if e.response.status_code == 400 and "incorrect value" in e.response.text.lower() and "commune" in e.response.text.lower(): + raise RuntimeError(f"L'API France Travail a renvoyé une erreur 400: La valeur du paramètre 'commune' est incorrecte. Veuillez vérifier le code INSEE ou envisager une recherche par département ou latitude/longitude.") else: - params["distance"] = 10 - - logger.info(f"Paramètres de recherche France Travail: {params}") - - async with httpx.AsyncClient() as client: - try: - response = await client.get(f"{self.api_base_url}/v2/offres/search", headers=headers, params=params) - response.raise_for_status() - return FranceTravailSearchResponse(**response.json()) - except httpx.HTTPStatusError as e: - logger.error(f"Erreur HTTP lors de la recherche d'offres France Travail: {e.response.status_code} - {e.response.text}") raise RuntimeError(f"Échec de la recherche d'offres France Travail: {e.response.text}") - except Exception as e: - logger.error(f"Erreur inattendue lors de la recherche d'offres France Travail: {e}") - raise RuntimeError(f"Échec inattendu lors de la recherche d'offres France Travail: {e}") + except httpx.RequestError as e: + logger.error(f"Erreur réseau lors de la recherche d'offres France Travail: {e}") + raise RuntimeError(f"Erreur réseau lors de la recherche d'offres France Travail: {e}") async def get_offer_details(self, offer_id: str) -> OffreDetail: token = await self._get_access_token() headers = { - "Accept": "application/json", - "Authorization": f"Bearer {token}" + "Authorization": f"Bearer {token}", + "Content-Type": "application/json" } - - async with httpx.AsyncClient() as client: - try: - response = await client.get(f"{self.api_base_url}/v2/offres/{offer_id}", headers=headers) - response.raise_for_status() - return OffreDetail(**response.json()) - except httpx.HTTPStatusError as e: - logger.error(f"Erreur HTTP lors de la récupération des détails de l'offre {offer_id}: {e.response.status_code} - {e.response.text}") - raise RuntimeError(f"Échec de la récupération des détails de l'offre {offer_id}: {e.response.text}") - except Exception as e: - logger.error(f"Erreur inattendue lors de la récupération des détails de l'offre {offer_id}: {e}") - raise RuntimeError(f"Échec inattendu lors de la récupération des détails de l'offre {offer_id}: {e}") + logger.info(f"Appel à l'API France Travail pour get_offer_details avec id: {offer_id}") + try: + response = await self.client.get(f"/v2/offres/{offer_id}", headers=headers) + response.raise_for_status() + logger.info(f"Réponse brute de l'API France Travail (get_offer_details): {response.json()}") + return OffreDetail(**response.json()) + except httpx.HTTPStatusError as e: + logger.error(f"Échec de la récupération des détails de l'offre {offer_id}: {e.response.status_code} - {e.response.text}") + raise RuntimeError(f"Échec de la récupération des détails de l'offre {offer_id}: {e.response.text}") + except httpx.RequestError as e: + logger.error(f"Erreur réseau lors de la récupération des détails de l'offre {offer_id}: {e}") + raise RuntimeError(f"Erreur réseau lors de la récupération des détails de l'offre {offer_id}: {e}") france_travail_offer_service = FranceTravailOfferService() \ No newline at end of file diff --git a/backend/services/romeo_service.py b/backend/services/romeo_service.py index b282e31..fb15f00 100644 --- a/backend/services/romeo_service.py +++ b/backend/services/romeo_service.py @@ -1,81 +1,62 @@ import httpx import logging -from typing import List, Dict, Any, Optional +from typing import List, Dict, Any from core.config import settings -from services.oauth_service import OAuthService # Assurez-vous que ce service existe +from services.france_travail_auth_service import france_travail_auth_service logger = logging.getLogger(__name__) class RomeoService: def __init__(self): - self.base_url = settings.FRANCE_TRAVAIL_ROMEO_API_URL # URL de base de l'API Romeo - self.scope = "api_romeov2" # Scope spécifique pour Romeo - self.oauth_service = OAuthService(settings.FRANCE_TRAVAIL_OAUTH_URL, settings.FRANCE_TRAVAIL_CLIENT_ID, settings.FRANCE_TRAVAIL_CLIENT_SECRET) - self.client = httpx.AsyncClient() + # CORRIGÉ ICI: Utilise 'FRANCE_TRAVAIL_ROMEO_API_URL' comme suggéré par l'erreur + self.base_url = settings.FRANCE_TRAVAIL_ROMEO_API_URL + self._http_client = httpx.AsyncClient() logger.info(f"RomeoService initialized with base_url: {self.base_url}") - async def _get_access_token(self) -> str: - """Récupère le token d'accès spécifique à l'API Romeo.""" - try: - token_response = await self.oauth_service.get_access_token(self.scope) - return token_response.access_token - except Exception as e: - logger.error(f"Erreur lors de la récupération du token d'accès pour Romeo: {e}") - raise RuntimeError(f"Impossible de récupérer le token d'accès pour Romeo: {e}") - - async def _call_api(self, endpoint: str, text: str) -> Optional[Dict[str, Any]]: + async def _call_api(self, endpoint: str, data: Dict[str, Any]) -> Dict[str, Any]: """ - Appelle un endpoint de l'API Romeo avec le texte donné. - Gère l'authentification et les erreurs de base. + Appel générique à une endpoint de l'API Romeo. + Récupère le jeton d'accès via le service d'authentification. """ - token = await self._get_access_token() + access_token = await france_travail_auth_service.get_access_token() headers = { - "Authorization": f"Bearer {token}", - "Content-Type": "application/json; charset=utf-8" + "Authorization": f"Bearer {access_token}", + "Content-Type": "application/json" } - # Les APIs Romeo attendent le texte dans un champ 'texte' de l'objet JSON - data = {"texte": text} - url = f"{self.base_url}{endpoint}" - logger.info(f"Calling Romeo API: {url} with text length {len(text)}") + + logger.info(f"Appel API Romeo: {url} avec données: {data.keys()}") try: - response = await self.client.post(url, headers=headers, json=data, timeout=30.0) - response.raise_for_status() # Lève une exception pour les codes d'erreur HTTP (4xx ou 5xx) + response = await self._http_client.post(url, json=data, headers=headers) + response.raise_for_status() # Lève une exception pour les codes d'état HTTP 4xx/5xx + logger.info(f"Réponse API Romeo reçue (status: {response.status_code}).") return response.json() except httpx.HTTPStatusError as e: - logger.error(f"Erreur HTTP lors de l'appel à Romeo {endpoint}: {e.response.status_code} - {e.response.text}") - raise RuntimeError(f"Erreur de l'API Romeo: {e.response.text}") - except httpx.RequestError as e: - logger.error(f"Erreur réseau ou de requête lors de l'appel à Romeo {endpoint}: {e}") - raise RuntimeError(f"Erreur de communication avec l'API Romeo: {e}") + logger.error(f"Erreur HTTP lors de l'appel à l'API Romeo: {e.response.status_code} - {e.response.text}") + raise RuntimeError(f"Erreur lors de l'appel à l'API Romeo: {e.response.text}") except Exception as e: - logger.error(f"Une erreur inattendue est survenue lors de l'appel à Romeo {endpoint}: {e}") - raise RuntimeError(f"Erreur inattendue avec l'API Romeo: {e}") + logger.error(f"Erreur inattendue lors de l'appel à l'API Romeo: {e}") + raise RuntimeError(f"Erreur inattendue lors de l'appel à l'API Romeo: {e}") async def predict_metiers(self, text: str) -> List[Dict[str, Any]]: """ Prédit les métiers ROME à partir d'un texte donné. - Retourne une liste de dictionnaires avec les détails des prédictions métiers. """ - if not text: - return [] # Retourne une liste vide si le texte est vide - response_data = await self._call_api("/predictionMetiers", text) - # Romeo renvoie souvent une liste directe de prédictions si successful - return response_data if response_data is not None else [] - + endpoint = "/predire/metiers" + data = {"texte": text} + response_data = await self._call_api(endpoint, data) + return response_data.get("predictions", []) async def predict_competences(self, text: str) -> List[Dict[str, Any]]: """ Prédit les compétences ROME à partir d'un texte donné. - Retourne une liste de dictionnaires avec les détails des prédictions de compétences. """ - if not text: - return [] # Retourne une liste vide si le texte est vide - response_data = await self._call_api("/predictionCompetences", text) - # Romeo renvoie souvent une liste directe de prédictions si successful - return response_data if response_data is not None else [] + endpoint = "/predire/competences" + data = {"texte": text} + response_data = await self._call_api(endpoint, data) + return response_data.get("predictions", []) # Instanciation unique du service Romeo romeo_service = RomeoService() \ No newline at end of file diff --git a/test/test_extraction.py b/test/test_extraction.py new file mode 100644 index 0000000..6b8b303 --- /dev/null +++ b/test/test_extraction.py @@ -0,0 +1,71 @@ +import os +import pypdf +import docx +import logging + +# Configurez un logger simple pour le test +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger(__name__) + +# Copiez/collez la fonction extract_text_from_file ici +def extract_text_from_file(filepath: str) -> str: + file_extension = os.path.splitext(filepath)[1].lower() + text_content = "" + + if not os.path.exists(filepath): + raise FileNotFoundError(f"Le fichier n'existe pas : {filepath}") + + if file_extension == ".pdf": + try: + with open(filepath, 'rb') as f: + reader = pypdf.PdfReader(f) + for page in reader.pages: + text_content += page.extract_text() or "" + if not text_content.strip(): + logger.warning(f"Le fichier PDF {filepath} a été lu mais aucun texte significatif n'a été extrait.") + except Exception as e: + logger.error(f"Erreur lors de l'extraction du texte du PDF {filepath}: {e}") + raise ValueError(f"Impossible d'extraire le texte du fichier PDF. Erreur: {e}") + elif file_extension == ".docx": + try: + document = docx.Document(filepath) + for paragraph in document.paragraphs: + text_content += paragraph.text + "\n" + if not text_content.strip(): + logger.warning(f"Le fichier DOCX {filepath} a été lu mais aucun texte significatif n'a été extrait.") + except Exception as e: + logger.error(f"Erreur lors de l'extraction du texte du DOCX {filepath}: {e}") + raise ValueError(f"Impossible d'extraire le texte du fichier DOCX. Erreur: {e}") + else: # Tente de lire comme un fichier texte + try: + with open(filepath, 'r', encoding='utf-8') as f: + text_content = f.read() + except UnicodeDecodeError: + # Si UTF-8 échoue, tente latin-1 + try: + with open(filepath, 'r', encoding='latin-1') as f: + text_content = f.read() + except Exception as e: + logger.error(f"Erreur lors de la lecture du fichier texte {filepath} avec UTF-8 et Latin-1: {e}") + raise ValueError(f"Impossible de lire le fichier texte (problème d'encodage). Erreur: {e}") + except Exception as e: + logger.error(f"Erreur inattendue lors de la lecture du fichier texte {filepath}: {e}") + raise ValueError(f"Impossible de lire le fichier texte. Erreur: {e}") + + return text_content + +# Remplacez par le chemin réel de votre fichier CV +# Assurez-vous que le chemin est correct par rapport à l'emplacement de ce script de test +cv_file_path = "../backend/uploads/6efe8ef7-52ee-4a55-8d88-7f10875c44bb.pdf" # ou .docx, .txt + +try: + extracted_text = extract_text_from_file(cv_file_path) + print("\n--- Texte extrait ---") + print(extracted_text) + print(f"\nLongueur du texte extrait: {len(extracted_text)} caractères") + if not extracted_text.strip(): + print("AVERTISSEMENT: Le texte extrait est vide ou ne contient que des espaces blancs.") +except (FileNotFoundError, ValueError) as e: + print(f"ERREUR lors de l'extraction: {e}") +except Exception as e: + print(f"ERREUR INATTENDUE: {e}") \ No newline at end of file