Files
Vivier/claude/cv-profil.schema.json

607 lines
15 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://pi-consulting.lu/schemas/cv-profil-1.2.json",
"title": "Profil candidat IT Club",
"description": "Format d'échange entre Claude (analyse du CV) et Vivier. Version 1.2 : ajoute les nationalités, la disponibilité classée, le cadre des missions (projet, mission, charge), les dates et le lieu des formations, la grille européenne des langues, le bénévolat et le permis de conduire. Vivier accepte encore les versions 1.0 et 1.1.",
"type": "object",
"additionalProperties": false,
"required": [
"schema_version",
"identite",
"experiences",
"technologies",
"langues",
"seniorite",
"source"
],
"properties": {
"schema_version": {
"enum": [
"1.0",
"1.1",
"1.2"
]
},
"identite": {
"type": "object",
"additionalProperties": false,
"required": [
"prenom",
"nom"
],
"properties": {
"prenom": {
"type": "string",
"minLength": 1
},
"nom": {
"type": "string",
"minLength": 1
},
"email": {
"type": [
"string",
"null"
],
"format": "email"
},
"telephone": {
"type": [
"string",
"null"
]
},
"adresse": {
"type": [
"object",
"null"
],
"additionalProperties": false,
"properties": {
"rue": {
"type": [
"string",
"null"
]
},
"code_postal": {
"type": [
"string",
"null"
]
},
"ville": {
"type": [
"string",
"null"
]
},
"pays": {
"type": [
"string",
"null"
]
}
}
},
"nationalites": {
"type": "array",
"maxItems": 4,
"description": "Nationalités écrites dans le CV, en codes pays ISO 3166-1 alpha-2 majuscules (FR, LU, MA). Seulement si le CV les indique : ne jamais les déduire du nom, de la langue ou du pays de résidence.",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
}
}
}
},
"titre": {
"type": [
"string",
"null"
],
"description": "Intitulé du profil, ex. Développeur Java"
},
"resume": {
"type": [
"string",
"null"
],
"description": "Synthèse du profil en 3 à 5 phrases"
},
"liens": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"type",
"url"
],
"properties": {
"type": {
"enum": [
"linkedin",
"github",
"portfolio",
"site",
"autre"
]
},
"url": {
"type": "string",
"format": "uri"
}
}
}
},
"experiences": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"poste",
"date_debut",
"type"
],
"properties": {
"poste": {
"type": "string",
"minLength": 1
},
"employeur": {
"type": [
"string",
"null"
]
},
"client": {
"type": [
"string",
"null"
],
"description": "Client final si mission de consultance"
},
"lieu": {
"type": [
"string",
"null"
]
},
"type": {
"enum": [
"emploi",
"mission",
"alternance",
"stage",
"independant"
]
},
"date_debut": {
"type": "string",
"pattern": "^[0-9]{4}(-(0[1-9]|1[0-2]))?$",
"description": "AAAA-MM, ou AAAA si le mois manque"
},
"date_fin": {
"type": [
"string",
"null"
],
"pattern": "^[0-9]{4}(-(0[1-9]|1[0-2]))?$",
"description": "null si poste en cours"
},
"description": {
"type": [
"string",
"null"
]
},
"technologies": {
"type": "array",
"items": {
"type": "string"
}
},
"projet": {
"type": [
"string",
"null"
],
"description": "Nom ou objet du projet, s'il est cité"
},
"mission": {
"type": [
"string",
"null"
],
"description": "Rôle confié, en une ou deux phrases"
},
"charge": {
"type": [
"string",
"null"
],
"description": "Charge de travail si le CV la donne : 100 %, 3 jours par semaine, 120 jours-homme"
}
}
}
},
"formations": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"diplome"
],
"properties": {
"diplome": {
"type": "string",
"minLength": 1
},
"etablissement": {
"type": [
"string",
"null"
]
},
"annee_fin": {
"type": [
"integer",
"null"
],
"minimum": 1950,
"maximum": 2100
},
"date_debut": {
"type": [
"string",
"null"
],
"pattern": "^[0-9]{4}(-(0[1-9]|1[0-2]))?$",
"description": "AAAA-MM, ou AAAA"
},
"date_fin": {
"type": [
"string",
"null"
],
"pattern": "^[0-9]{4}(-(0[1-9]|1[0-2]))?$",
"description": "AAAA-MM, ou AAAA. Garder aussi annee_fin"
},
"lieu": {
"type": [
"string",
"null"
],
"description": "Ville et pays de l'établissement"
}
}
}
},
"certifications": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"nom"
],
"properties": {
"nom": {
"type": "string",
"minLength": 1
},
"organisme": {
"type": [
"string",
"null"
]
},
"annee": {
"type": [
"integer",
"null"
],
"minimum": 1950,
"maximum": 2100
}
}
}
},
"technologies": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"nom",
"categorie"
],
"properties": {
"nom": {
"type": "string",
"minLength": 1,
"description": "Nom normalisé, ex. Java, Spring Boot, PostgreSQL"
},
"categorie": {
"enum": [
"langage",
"framework",
"base_de_donnees",
"outil",
"cloud",
"methode",
"autre"
]
},
"annees": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Années de pratique déduites des expériences"
}
}
}
},
"langues": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"langue"
],
"properties": {
"langue": {
"type": "string",
"minLength": 1
},
"niveau": {
"enum": [
"A1",
"A2",
"B1",
"B2",
"C1",
"C2",
"natif",
null
]
},
"cecrl": {
"type": [
"object",
"null"
],
"additionalProperties": false,
"description": "Grille européenne, seulement si le CV donne le détail par compétence (souvent un CV Europass). Sinon null : le niveau global suffit.",
"properties": {
"ecoute": {
"enum": [
"A1",
"A2",
"B1",
"B2",
"C1",
"C2",
null
]
},
"lecture": {
"enum": [
"A1",
"A2",
"B1",
"B2",
"C1",
"C2",
null
]
},
"production_orale": {
"enum": [
"A1",
"A2",
"B1",
"B2",
"C1",
"C2",
null
]
},
"interaction_orale": {
"enum": [
"A1",
"A2",
"B1",
"B2",
"C1",
"C2",
null
]
},
"ecriture": {
"enum": [
"A1",
"A2",
"B1",
"B2",
"C1",
"C2",
null
]
}
}
}
}
}
},
"seniorite": {
"type": "object",
"additionalProperties": false,
"required": [
"annees_experience",
"niveau"
],
"properties": {
"annees_experience": {
"type": "number",
"minimum": 0
},
"niveau": {
"enum": [
"junior",
"intermediaire",
"confirme",
"expert"
]
}
}
},
"disponibilite": {
"type": [
"string",
"null"
],
"description": "Disponibilité telle qu'écrite dans le CV, ex. Préavis de 2 mois"
},
"disponibilite_code": {
"enum": [
"immediate",
"1_mois",
"2_mois",
"3_mois",
"date",
"a_preciser",
null
],
"description": "Disponibilité classée : immediate, 1_mois, 2_mois, 3_mois (préavis), date (date précise connue), a_preciser. null si le CV n'en dit rien."
},
"disponibilite_date": {
"type": [
"string",
"null"
],
"format": "date",
"description": "AAAA-MM-JJ, obligatoire quand disponibilite_code vaut date"
},
"points_attention": {
"type": "array",
"description": "Trous dans le parcours, dates incohérentes, informations manquantes",
"items": {
"type": "string"
}
},
"mots_cles": {
"type": "array",
"maxItems": 60,
"description": "15 à 30 termes de recherche en minuscules : métiers, technologies clés, méthodes, domaines, avec leurs équivalents anglais ou français",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 80
}
},
"metadonnees": {
"type": "object",
"additionalProperties": false,
"description": "Classement du profil pour les filtres et la recherche",
"properties": {
"roles": {
"type": "array",
"maxItems": 10,
"description": "Métiers exercés, forme canonique au masculin singulier : développeur, architecte, chef de projet, scrum master, product owner, analyste, testeur, devops, administrateur système, data engineer…",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 80
}
},
"specialites": {
"type": "array",
"maxItems": 10,
"description": "Spécialités : back-end, front-end, full-stack, mobile, data, devops, cloud, sécurité, test, intégration, architecture, gestion de projet…",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 80
}
},
"secteurs": {
"type": "array",
"maxItems": 10,
"description": "Secteurs des employeurs et clients : banque, assurance, institutions européennes, secteur public, télécoms, industrie, santé, commerce…",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 80
}
},
"niveau_etudes": {
"enum": [
"bac",
"bac+2",
"bac+3",
"bac+4",
"bac+5",
"doctorat",
"autre",
null
]
},
"encadrement": {
"type": [
"boolean",
"null"
],
"description": "true si le CV décrit l'encadrement d'une équipe"
}
}
},
"benevolat": {
"type": "array",
"description": "Activités bénévoles citées dans le CV, une par élément",
"items": {
"type": "string",
"minLength": 1
}
},
"permis_conduire": {
"type": "array",
"description": "Catégories de permis de conduire citées dans le CV : B, A, C…",
"items": {
"type": "string",
"minLength": 1
}
},
"source": {
"type": "object",
"additionalProperties": false,
"required": [
"fichier_origine",
"date_analyse"
],
"properties": {
"fichier_origine": {
"type": "string",
"minLength": 1
},
"date_analyse": {
"type": "string",
"format": "date"
},
"langue_cv": {
"type": [
"string",
"null"
]
}
}
}
}
}