---
title: "README - Préparation des Données Parcoursup 2025"
author: "Exposition - InserJeunes"
date: "2025-02-20"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(tidyverse)
library(readxl)
load("prepa_ps_2025.RData")
sies_LG_reussite_passage_uai_composante <- read_excel(file.path(chemin_racine_data,"SSM/SIES/2025/reussite_passage/LG_coh19et22_uai_composante.xlsx"))
sies_LG_reussite_passage_uai_principal <- read_excel(file.path(chemin_racine_data,"SSM/SIES/2025/reussite_passage/LG_coh19et22_uai_principal.xlsx"))

```

# Introduction

Le fichier **ensemble_script_prepa_ps.R** est un script maître permettant de lancer l'ensemble des scripts nécessaires à la préparation des données Parcoursup pour la campagne 2025. Il coordonne l'importation, l'appariement et l'analyse des données afin de générer un catalogue final des formations avec des informations d'insertion professionnelle, de rémunération et de réussite.

# Déroulement du Script

## Chargement des librairies

Avant d'exécuter le script, il est essentiel d'avoir installé et chargé les librairies R requises :

```{r eval=FALSE}
library(tidyverse)
library(readxl)
```

## Importation et préparation des données (Chronophage)

Le premier script **0_script_prepa_ps_import_data.R** importe et structure les données brutes. Le second script **1_script_prepa_ps_prepa_data.R** recherche l'ensemble des certifications potentielles associées à un code CFD, MEF, SISE, RNCP, IDEO ou Id_RCO (clé des ministères éducatifs).

### Importation des données

Les données utiles à l'appariement des formations ParcourSup sont essentiellement disponibles sous forme d'API ou via des url d'appels:

-   **CertifInfo**: <https://www.data.gouv.fr/fr/datasets/referentiel-national-des-certifications/>,
-   **BCN**:
    -   n_mef: <https://bcn.depp.education.fr/bcn/workspace/viewTable/n/N_MEF>,
    -   n_formation_diplome: <https://bcn.depp.education.fr/bcn/workspace/viewTable/n/N_FORMATION_DIPLOME>,
    -   n_niveau_formation_diplome: <https://bcn.depp.education.fr/bcn/workspace/viewTable/n/N_NIVEAU_FORMATION_DIPLOME>,
    -   n_diplome_sise: <https://bcn.depp.education.fr/bcn/workspace/viewTable/n/N_DIPLOME_SISE>,
    -   v_formation_diplome: <https://bcn.depp.education.fr/bcn/index.php/workspace/viewTable/n/V_FORMATION_DIPLOME/nbElements/20>
-   **Onisep**:
    -   Idéo-Formations initiales en France: <https://opendata.onisep.fr/data/5fa591127f501/2-ideo-formations-initiales-en-france.htm?tab=table_65f84591dcff4&id=65f84591dcff4&pluginCode=table&idtf=2&cms_mode=ON_&lheo=0&pid=f0389fae3310c17132b888ea3286c8c397c656a9&from=30>,
    -   Table de passage codes certifications et formations: <https://api.opendata.onisep.fr/downloads/6152ccdf850ef/6152ccdf850ef.json>

Certaines restent néanmoins à importer et sont stockées dans le dossiers data_utiles avant d'être importées:

-   **ACCE**: <https://www.education.gouv.fr/acce/search.php?mode=simple>,
-   **Liste des formations ParcourSup**,
-   **Encodages manuels réalisés en 2024 et 2025**,
-   **Catégorisation des certifications en scope 2024/2025**.

#### API et token

Deux API nécéssitent l'utilisation de tokens pour importer les données: Exposition et Certif Info.

##### API Exposition InserJeunes

L'API est disponible à l'adresse suivante: <https://exposition.inserjeunes.beta.gouv.fr/api/doc/> et il faut contacter [contact\@inserjeunes.beta.gouv.fr](mailto:contact@inserjeunes.beta.gouv.fr){.email} pour bénéficier d'un token.

##### API Certif Info

L'API est disponible à l'adresse suivante: <https://api-certifinfo.intercariforef.org/docs> et il faut contacter [support\@intercariforef.org](mailto:support@intercariforef.org){.email} pour bénéficier d'un token.

#### Format minimal des données en entrée

Les tables nécéssaires à l'appariement doivent être structurées et contenir des champs utiles à l'exécution du script. Ceux-ci sont détaillés ci-après.

##### Données BCN

###### N_MEF

```{r N_MEF, echo=FALSE}
n_mef %>%    
  select(MEF,MEF_STAT_11,FORMATION_DIPLOME,DUREE_DISPOSITIF,ANNEE_DISPOSITIF,DATE_OUVERTURE,DATE_FERMETURE) %>%    
  slice(1:5) %>%    
  knitr::kable()
```

###### N_FORMATION_DIPLOME

```{r N_FORMATION_DIPLOME, echo=FALSE}
n_formation_diplome %>%   
  select(FORMATION_DIPLOME,NIVEAU_FORMATION_DIPLOME,contains("ANCIEN_DIPLOME_"),contains("NOUVEAU_DIPLOME_"),DATE_OUVERTURE) %>%   
  slice(1:5) %>%    
  knitr::kable()
```

###### N_NIVEAU_FORMATION_DIPLOME

```{r N_NIVEAU_FORMATION_DIPLOME, echo=FALSE}
n_niveau_formation_diplome %>%   
  select(NIVEAU_FORMATION_DIPLOME,NIVEAU_QUALIFICATION_RNCP) %>%  
  slice(1:5) %>%    
  knitr::kable()
```

###### N_DIPLOME_SISE

```{r N_DIPLOME_SISE, echo=FALSE}
n_diplome_sise %>%    
  select(DIPLOME_SISE) %>% 
  slice(1:5) %>%  
  knitr::kable()
```

###### V_FORMATION_DIPLOME

```{r V_FORMATION_DIPLOME, echo=FALSE}
v_formation_diplome %>%    
  select(FORMATION_DIPLOME) %>%    
  slice(1:5) %>%
  knitr::kable()
```

##### Données onisep

###### Idéo-Formations initiales en France

```{r table_onisep, echo=FALSE}
table_onisep %>%    select(code_rncp,url_et_id_onisep) %>%    slice(1:5) %>%    knitr::kable()
```

###### Table de passage codes certifications et formations

```{r table_de_passage_codes_certifications_et_formations, echo=FALSE}
table_de_passage_codes_certifications_et_formations %>%    select(certif_info_ci_identifiant,ideo_identifiant_formation,ci_code_rncp,ci_code_scolarite) %>%    slice(1:5) %>%    knitr::kable()
```

##### Données CertifInfos

```{r opendata_certifinfo, echo=FALSE}
opendata_certifinfo %>%    select(Code_Diplome,codeIdeo2,Code_RNCP,Code_Scolarité) %>%    slice(1:5) %>%    knitr::kable()
```

##### Données ACCE

###### ACCE_UAI

```{r ACCE_UAI, echo=FALSE}
ACCE_UAI <- data.table::fread(file.path(chemin_racine_data,"ACCE/Extraction ACCE.csv"),encoding = "Latin-1") %>%   
  mutate(academie=str_pad(academie,side = "left",pad="0",width=2))  

ACCE_UAI %>%    
  select(numero_uai,academie,date_ouverture,date_fermeture) %>%    slice(1:5) %>%    knitr::kable()
```

###### ACCE_UAI_MERE

```{r ACCE_UAI_MERE, echo=FALSE}
ACCE_UAI_MERE %>%    
  select(numero_uai_trouve,numero_uai_mere)%>%    slice(1:5) %>%    knitr::kable()
```

##### Liste des formations ParcourSup

```{r parcoursup_catalogue_init, echo=FALSE}
parcoursup_catalogue_init %>%    slice(1:5) %>%    knitr::kable()
```

##### Encodages manuels réalisés en 2024 et 2025

```{r association_ps_sise, echo=FALSE}
association_ps_sise %>%    select(CODEFORMATIONACCUEIL,code_certification_retenu) %>%    slice(1:5) %>%    knitr::kable()
```

##### Catégorisation des certifications en scope 2024/2025

```{r correspondance_formation_scope_exposition, echo=FALSE}
correspondance_formation_scope_exposition %>%    select(`Type diplôme`,Filiere,`Scope campagne 2025`) %>%    slice(1:5) %>%    knitr::kable()
```

### Préparation des données

Le script a pour objectif de valider et enrichir les codes de certification présents dans le catalogue Parcoursup (CFD, MEF, SISE, Ideo, RNCP, Clé des ministères éducatifs), en les reliant à des référentiels nationaux via API et bases métiers.

4 phases permettent d'aboutir à la création d'une table (parcoursup_param) dans laquelle, pour chaque formation Parcoursup, on dispose de toutes les options de correspondances valides par niveau d’ancienneté (self, ancien, nouveau code) et par nature d’appariement (normal, inverse).

1.  **Initialisation**

    -   Chargement des codes CFD, MEF, RNCP, IDEO, SISE, ID_RCO.

    -   Transformation en format long.

2.  **Construction des correspondances**

    -   Pour chaque type de code :

        -   Nettoyage (éclatement des codes concaténés)

        -   Jointure avec les référentiels (certifinfo, MEF, formations...)

        -   Enrichissement via API Intercariforef (code SISE, CI anciens/nouveaux)

        -   Détermination de la validité

3.  **Correspondance inverse**

    -   CFD → MEF pour certains cas (apprentissage vs scolaire)

    -   Génération de MEFSTAT11:xxxx à partir des CFD valides

4.  **Fusion finale**

    -   Fusion de toutes les correspondances normal/inverse

    -   Pivot vers un format exploitable par CODEFORMATIONACCUEIL

    -   Création de parcoursup_param, table finale enrichie

``` js
[
  {
    "CODEFORMATIONACCUEIL":"47168",
    "self":[
      {
        "type_certification":"LISTE_IDEO",
        "validite_code_certification":"Valide",
        "code_ci":"92897","normal":"SISE:2300030",
        "inverse":null
      }
      ],
      "ancien":[
        {
          "type_certification":"LISTE_IDEO",
          "validite_code_certification":"Non valide - Plusieurs codes certification associés",
          "code_ci":null,
          "normal":null,
          "inverse":null
        }
        ],
        "nouveau":{}
  },
  {"CODEFORMATIONACCUEIL":"47169",
  "self":{},
  "ancien":[
    {
      "type_certification":"LISTE_IDEO",
      "validite_code_certification":"Valide",
      "code_ci":"116454",
      "normal":"SISE:2300020",
      "inverse":null
    }
    ],
    "nouveau":{}
  },
  {
    "CODEFORMATIONACCUEIL":"12972",
    "self":[
      {
        "type_certification":"CODESISE",
        "validite_code_certification":"Valide",
        "code_ci":null,
        "normal":"SISE:1002866",
        "inverse":null
      }
      ],
      "ancien":{},
      "nouveau":[
        {
          "type_certification":"LISTE_IDEO",
          "validite_code_certification":"Valide",
          "code_ci":"76522",
          "normal":"SISE:1002866",
          "inverse":null
        }
        ]
  }
  ]
```

### Traitement chronophage: enregistrer une image des données

> **Remarque :** Ces deux premières étapes peuvent être longues. Pour éviter de les répéter inutilement, une image des données (`prepa_ps_2025.RData`) est sauvegardée et peut être rechargée directement au lieu de relancer l'importation et la préparation des données.
>
> Les données importées non disponibles via api sont initialement stockées dans le dossier **"data_utiles"**.

### Détail des appels du script pour l'import, la préparation et l'enregistrement des données

```{r eval=FALSE}
# lancer les scripts d'appariement ----
##1- Imports des données ----
#Ce premier script d'import des données est potentiellement chronophage,
#en fin de script il enregistre une image des données prepa_ps_2025.RData qu'on peut charger plutôt que de relancer systématiquement le premier script.


# Définition du chemin racine pour les données (à adapter selon l'emplacement des fichiers)
chemin_racine_data <- "data_utiles"
choix_api_exposition <- "recette"

### Clés API utiles au moment de l'import des données ----

#### API Exposition InserJeunes ----
# apiKey_ij <- XXXXXXX #clé de l'API Exposition InserJeunes: https://exposition.inserjeunes.beta.gouv.fr/api/doc/

#### API Certif Info ----
# token_ci <- XXXXXXX #clé de l’API Certif Info : https://api-certifinfo.intercariforef.org/docs

urls <- list(
  exposition_ij= list(
    production = "https://exposition.inserjeunes.beta.gouv.fr",
    recette = "https://recette.exposition.inserjeunes.incubateur.net"
  )
)
  

ensemble_key <- readRDS("../data/ensemble_key.rds") #les clés peuvent être stockées dans un fichier si nécéssaire
apiKey_ij <- ensemble_key$apiKey_ij
token_ci <- ensemble_key$token_ci

# source("scripts_appariements/0_script_prepa_ps_import_data.R")

##2- Recherche des codes certification potentiels ----
# source("scripts_appariements/1_script_prepa_ps_prepa_data.R")


# Sauvegarde de l'image des données importées et pré-traitées
# ___________________________________________________________
# !!! Il est fortement conseillé d'enregistrer les données importées et pré-traitées car ces étapes
# sont chronophages.
# ___________________________________________________________
# save.image("prepa_ps_2025.RData")
# rm(list=ls())
# Charger l'image des données predemment importées
load("prepa_ps_2025.RData")
```

## Exécution des scripts d'appariement

Tous les scripts utilisés sont situés dans le dossier **"scripts_appariements".**

En dehors des scripts d'import et de préparation des données, le script "**ensemble_script_prepa_ps.R"** lance les scripts suivants, chacun ayant un rôle spécifique :

```{r echo=FALSE}
data.frame(
  Numéro = c("2-1","2-2","2-3","3","4"),
  Script = c(
    "2_1_script_prepa_ps_focus_insertion.R",
    "2_2_script_prepa_ps_focus_remuneration.R",
    "2_3_script_prepa_ps_focus_passage_reussite.R",
    "3_script_prepa_ps_agregation_focus.R",
    "4_script_prepa_ps_analyse_couverture.R"
  ),
  Description = c(
    "Appariement avec les données Insertion d'Exposition",
    "Appariement avec les données Rémunération d'Exposition",
    "Appariement avec les données du SIES (passage et réussite)",
    "Agrégation des données",
    "Analyse globale de la couverture"
  )
) %>% 
  knitr::kable()
```

```{r eval=FALSE}
source("sripts_appariements/2_1_script_prepa_ps_focus_insertion.R")
source("sripts_appariements/2_2_script_prepa_ps_focus_remuneration.R")
source("sripts_appariements/2_3_script_prepa_ps_focus_passage_reussite.R")
source("sripts_appariements/3_script_prepa_ps_agregation_focus.R")
source("sripts_appariements/4_script_prepa_ps_analyse_couverture.R")
```

Chaque script d'appariement importe dans un premier temps les données à apparier.

-   **Insertion (Exposition Inserjeunes):**

Formations: <https://exposition.inserjeunes.beta.gouv.fr/api/doc/#/default/get_api_inserjeunes_formations>,

-   **Rémunération (Exposition Inserjeunes):**

Certifications: <https://exposition.inserjeunes.beta.gouv.fr/api/doc/#/default/get_api_inserjeunes_certifications>.

-   **Données de réussite et passage du SIES**,

UAI principale

```{r sies_LG_reussite_passage_uai_principal, echo=FALSE}
sies_LG_reussite_passage_uai_principal %>% 
  slice(1:5) %>% 
  knitr::kable()
```

UAI composante

```{r sies_LG_reussite_passage_uai_composante, echo=FALSE}
sies_LG_reussite_passage_uai_composante %>% 
  slice(1:5) %>% 
  knitr::kable()
```

#### Format des données en sortie

##### Table utile en sortie du script de préparation des données (1_script_prepa_ps_prepa_data.R)

Le script associe à chaque formation du catalogue Parcoursup initial tous les codes certifications possibles en fonction des codes formations en entrée (CFD, MEF, SISE, Idéo, RNCP, id_RCO). Ainsi pour une ligne du catalogue initial ppeuvent être associées plusieurs lignes en sortie.

Cette table contient l'ensemble des champs du catalogue initial et 6 nouveaux champs:

-   **type_certification**: Renvoie le champs initial utilisé pour la recherche de nouveau code certification. Il prend une des valeurs suivantes:

    -   CODECFD,
    -   CODEMEF,
    -   CODESISE,
    -   ID_RCO,
    -   LISTE_RNCP,
    -   LISTE_IDEO.

-   **code_certification**: Renvoie la valeur du champs initial utilisé pour la recherche de nouveau code certification,

-   **validite_code_certification**: Renvoie une valeur parmi :

    -   Valide: un unique code certification possible (code_certification_possible) est associé au code certification initial (code_certification),

    -   Non valide - Plusieurs codes certification associés: plusieurs codes certifications possibles (code_certification_possible) sont associés au code certification initial (code_certification),,

    -   Non valide - Code inconnu: aucun code certification possible (code_certification_possible) n'est associé au code certification initial (code_certification),

    -   NA: il n'y a pas de code certification initial (code_certification).

-   **anciennete_certification_ci:** Renvoie une valeur parmi :

    -   self: le code certification possible est directement associé au code certification initial (code_certification),

    -   ancien: le code certification possible est associé au code certification initial (code_certification) par un ancien code certification,

    -   nouveau: le code certification possible est associé au code certification initial (code_certification) par un nouveau code certification,

    -   NA: il n'y a pas de code certification initial (code_certification).

-   **appariement:** Dans le cas de formation mixte (voie scolaire et apprentissage), inserjeunes agrège parfois les données dans une seule voie. Les données de l'apprentissage sont associées aux données d'insertion de la voie scolaire et ne sont renseignée que pour la voie scolaire (qui est donc l'agrégation des 2 voies). La réciproque est égaelement vraie. Le script propose donc parmi les codes possibles, les codes correspondant à la voie scolaire pour l'apprentissage (mefstat11) et reciproquement pour la scolaire (CFD). Le champ renvoie une valeur parmi :

    -   normal: le code certification possible est directement associé au code certification initial (code_certification),

    -   inverse: le code certification possible est inversement associé au code certification initial (code_certification): CFD pour la voie scolaire et MEFSTAT11 pour le voie apprentissage,

    -   NA: il n'y a pas de code certification initial (code_certification).

-   code_certification_possible: Renvoie un code valide (existant dans la BCN) pouvant directement être appelé sur l'API inserjeunes. Son format est soit:

    -   CFD:XXXXXXXX

    -   MEFSTAT11:XXXXXXXXXXX

    -   SISE:XXXXXX

```{r parcoursup_param, echo=FALSE}
parcoursup_param %>% 
  slice(1:5) %>% 
  knitr::kable()
```

##### Table en sortie des scripts d'appariement avec les données à exposer

Les script d'appariement avec les données à exposer renvoie systématiquement une table contenant les champs suivants :

-   CODEFORMATIONACCUEIL,

-   code_certification_retenu: code_certification_insertion, code_certification_salaire ou code_certification_sies lorsque la formation est couverte,

-   Les champs liés aux statistiques à afficher : (taux_en_emploi_6_mois, taux_en_formation et taux_autres_6_mois) pour l'insertion, (salaire_12_mois_q1,salaire_12_mois_q2 et salaire_12_mois_q3) pour la rémunération ou (taux_de_reussite_19 et taux_de_passage_22) pour les données du sies,

-   Couverture_insertion: explication de non couverture.

###### Insertion d'Expositions (2_1_script_prepa_ps_focus_insertion.R)

```{r 2_1_script_prepa_ps_focus_insertion, echo=FALSE}
structure(list(CODEFORMATIONACCUEIL = c(12621, 3268, 5318, 24078, 
6503), code_certification_insertion = c("SISE:2300047", NA, "MEFSTAT11:32211031212", 
NA, "SISE:2300027"), taux_en_emploi_6_mois = c(3L, NA, 24L, NA, 
10L), taux_en_formation = c(70L, NA, 60L, NA, 79L), taux_autres_6_mois = c(27L, 
NA, 16L, NA, 11L), Couverture_insertion = c("Couvert", "Non couvert - UAI Inconnu", 
"Couvert", "Non couvert - Nouvelle formation", "Couvert")), row.names = c(NA, 
-5L), class = c("tbl_df", "tbl", "data.frame")) %>% 
  knitr::kable()
```

###### Rémunération d'Expositions (2_2_script_prepa_ps_focus_remuneration.R)

```{r 2_2_script_prepa_ps_focus_remuneration, echo=FALSE}
structure(list(CODEFORMATIONACCUEIL = c(47168, 47169, 47102, 
47082, 47103), code_certification_salaire = c("SISE:2300030", 
"SISE:2300020", "CFD:32020116", "CFD:32023012", "CFD:32031312"
), salaire_12_mois_q1 = c(1560L, 1340L, 1550L, 1560L, 1510L), 
    salaire_12_mois_q2 = c(1790L, 1430L, 1680L, 1800L, 1690L), 
    salaire_12_mois_q3 = c(2030L, 1720L, 1900L, 2090L, 1890L), 
    couverture_salaire = c("Couvert", "Couvert", "Couvert", "Couvert", 
    "Couvert")), row.names = c(NA, -5L), class = c("tbl_df", 
"tbl", "data.frame")) %>% 
  knitr::kable()
```

###### Données du SIES (passage et réussite) (2_3_script_prepa_ps_focus_passage_reussite.R)

```{r 2_3_script_prepa_ps_focus_passage_reussite, echo=FALSE}
structure(list(CODEFORMATIONACCUEIL = c(8731, 28302, 33838, 9285, 
17209), code_certification_sies = c(NA, NA, NA, "SISE:2300026", 
"SISE:2300027"), taux_de_reussite_19 = c(NA, NA, NA, "50.3", 
"39.8"), taux_de_passage_22 = c(NA, NA, NA, "50.9", "33"), Couverture_sies = c("Non couvert - Sans raison évidente", 
"Non couvert - Sans raison évidente", "Non couvert - Sans raison évidente", 
"Couvert", "Couvert")), row.names = c(NA, -5L), class = c("tbl_df", 
"tbl", "data.frame")) %>% 
  knitr::kable()
```

##### Table en sortie du script d'agrégation des données (3_script_prepa_ps_agregation_focus.R)

Le script d'agrégation des données renvoie la table initiale parcoursup à laquelle on renseigne les données d'insertion, de rémunération et les taux de passage.

##### Table en sortie du script d'analyse globale de la couverture (4_script_prepa_ps_analyse_couverture.R)

Ce script permet d'avoir une synthèse de la couverture des données d'Inserjeunes à 3 niveaux:

-   Périmètre des formations (le scope),

-   Type de diplôme,

-   Périmètre des formation et moment de l'appariement (sans api Inserjeunes, avec API Inserjeunes et avec les efforts d'appariement).

###### Synthèse de couverture en fonction du périmètre des formations (stats_catalogue_parcoursup_couverture_synthese)

```{r stats_catalogue_parcoursup_couverture_synthese, echo=FALSE}
structure(list(`Scope campagne 2025` = c("Non", "Oui"), `Couvert (nb)` = c(43L, 
9896L), `Couvert (%)` = c(0.0142478462557985, 0.537650766054547
), `Non couvert (nb)` = c(2975L, 8510L), `Non couvert (%)` = c(0.985752153744201, 
0.462349233945453), `Non couvert - Sous le seuil de 20 élèves (nb)` = c(75L, 
2842L), `Non couvert - Sous le seuil de 20 élèves (%)` = c(0.0248508946322068, 
0.154406171900467), `Non couvert - Nouvelle formation (nb)` = c(110L, 
136L), `Non couvert - Nouvelle formation (%)` = c(0.0364479787939032, 
0.00738889492556775), `Non couvert - code certification inconnu (nb)` = c(593L, 
44L), `Non couvert - code certification inconnu (%)` = c(0.196487740225315, 
0.00239052482886015), `Non couvert - UAI Inconnu (nb)` = c(319L, 
760L), `Non couvert - UAI Inconnu (%)` = c(0.105699138502319, 
0.0412908834075845), `Non couvert - Territoire mal couvert (nb)` = c(16L, 
60L), `Non couvert - Territoire mal couvert (%)` = c(0.00530152418820411, 
0.0032598065848093), `Non couvert - Plusieurs formations en annéee terminale associées (nb)` = c(15L, 
1L), `Non couvert - Plusieurs formations en annéee terminale associées (%)` = c(0.00497017892644135, 
5.43301097468217e-05), `Non couvert - Plusieurs certifications associées au départ dont une seule est couverte (nb)` = c(0L, 
18L), `Non couvert - Plusieurs certifications associées au départ dont une seule est couverte (%)` = c(0, 
0.00097794197544279), `Non couvert - Sans raison évidente (nb)` = c(1564L, 
4415L), `Non couvert - Sans raison évidente (%)` = c(0.518223989396952, 
0.239867434532218)), row.names = c(NA, -2L), class = c("tbl_df", 
"tbl", "data.frame"))%>% 
  knitr::kable()

```

###### Synthèse de couverture en fonction du type de diplôme des formations (stats_catalogue_parcoursup_couverture)

```{r stats_catalogue_parcoursup_couverture, echo=FALSE}

structure(list(`Type diplôme` = c("BPJEPS", "BREVET DE MAÎTRISE", 
"BTS - AGRICOLE", "BTS - AGRICOLE", "BTS - MARITIME", "BTS - PRODUCTION", 
"BTS - PRODUCTION", "BTS - SERVICES", "BTS - SERVICES", "CERTIFICAT DE SPÉCIALISATION", 
"CERTIFICAT DE SPÉCIALISATION", "CERTIFICAT DE SPÉCIALISATION AGRICOLE", 
"CPES", "CUPGE - ARTS LETTRES LANGUES", "CUPGE - DROIT-ÉCONOMIE-GESTION", 
"CUPGE - SCIENCES, TECHNOLOGIE, SANTÉ", "D.E SECTEUR SANITAIRE", 
"D.E SECTEUR SANITAIRE", "D.E SECTEUR SOCIAL", "D.E SECTEUR SOCIAL", 
"DE SPECTACLE VIVANT", "DEJEPS", "DEUST", "DEUST", "DIPLÔME D'ETABLISSEMENT", 
"DIPLÔME D'ETABLISSEMENT", "DIPLÔME D'UNIVERSITÉ", "DIPLÔME D'ÉTABLISSEMENT", 
"DIPLÔME DE SPÉCIALISATION PROFESSIONNELLE", "DIPLÔME DE SPÉCIALISATION PROFESSIONNELLE", 
"DIPLÔME NATIONAL D'ART", "DMA", "DN MADE", "DN MADE", "DNSP SPECTACLE VIVANT", 
"FCIL", "FORMATION DES ÉCOLES DE COMMERCE ET DE MANAGEMENT", 
"FORMATION DES ÉCOLES DE COMMERCE ET DE MANAGEMENT BAC + 3", 
"FORMATION DES ÉCOLES DE COMMERCE ET DE MANAGEMENT BAC + 3", 
"FORMATION DES ÉCOLES DE COMMERCE ET DE MANAGEMENT BAC + 5", 
"FORMATION DES ÉCOLES SUPÉRIEURES D'ART", "FORMATION DES ÉCOLES SUPÉRIEURES DE CUISINE", 
"FORMATION PROFESSIONNELLE", "FORMATION PROFESSIONNELLE", "FORMATION VALANT GRADE DE LICENCE", 
"FORMATIONS  DES ÉCOLES D'INGÉNIEURS", "FORMATIONS  DES ÉCOLES D'INGÉNIEURS", 
"FORMATIONS BAC + 3", "FORMATIONS BAC + 5", "LICENCE GÉNÉRALE", 
"LICENCE GÉNÉRALE", "LICENCE PROFESSIONNELLE", "LICENCE PROFESSIONNELLE"
), Filiere = c("Sco.", "App.", "App.", "Sco.", "Sco.", "App.", 
"Sco.", "App.", "Sco.", "App.", "Sco.", "App.", "Sco.", "Sco.", 
"Sco.", "Sco.", "App.", "Sco.", "App.", "Sco.", "Sco.", "Sco.", 
"App.", "Sco.", "App.", "Sco.", "Sco.", "Sco.", "App.", "Sco.", 
"Sco.", "App.", "App.", "Sco.", "Sco.", "Sco.", "Sco.", "App.", 
"Sco.", "Sco.", "Sco.", "Sco.", "App.", "Sco.", "Sco.", "App.", 
"Sco.", "Sco.", "Sco.", "App.", "Sco.", "App.", "Sco."), `Scope campagne 2025` = c("Non", 
"Non", "Oui", "Oui", "Non", "Oui", "Oui", "Oui", "Oui", "Oui", 
"Non", "Oui", "Non", "Non", "Non", "Non", "Non", "Non", "Non", 
"Non", "Non", "Non", "Non", "Non", "Non", "Non", "Non", "Non", 
"Oui", "Non", "Non", "Non", "Non", "Non", "Non", "Non", "Oui", 
"Non", "Non", "Oui", "Non", "Non", "Non", "Non", "Non", "Non", 
"Oui", "Non", "Non", "Non", "Oui", "Non", "Oui"), `Couvert (nb)` = c(0L, 
0L, 121L, 19L, 0L, 889L, 1170L, 2045L, 2372L, 54L, 33L, 45L, 
0L, 1L, 0L, 5L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 60L, 0L, 0L, 0L, 
0L, 0L, 0L, 160L, 0L, 0L, 0L, 2946L, 3L, 15L), `Couvert (%)` = c(0, 
0, 0.210434782608696, 0.0365384615384615, 0, 0.467157120336311, 
0.692717584369449, 0.367211348536542, 0.77516339869281, 0.174757281553398, 
0.0962099125364431, 0.2, 0, 1, 0, 0.217391304347826, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0.0232558139534884, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0.909090909090909, 0, 0, 0, 0, 0, 0, 0.275387263339071, 
0, 0, 0, 0.769994772608468, 1, 0.6), `Non couvert (nb)` = c(68L, 
1L, 454L, 501L, 19L, 1014L, 519L, 3524L, 688L, 255L, 310L, 180L, 
25L, 0L, 3L, 18L, 4L, 515L, 194L, 239L, 9L, 1L, 93L, 58L, 1L, 
39L, 42L, 1L, 9L, 7L, 52L, 1L, 9L, 320L, 13L, 121L, 49L, 5L, 
133L, 6L, 36L, 15L, 559L, 1L, 10L, 4L, 421L, 1L, 42L, 6L, 880L, 
0L, 10L), `Non couvert (%)` = c(1, 1, 0.789565217391304, 0.963461538461538, 
1, 0.532842879663689, 0.307282415630551, 0.632788651463458, 0.22483660130719, 
0.825242718446602, 0.903790087463557, 0.8, 1, 0, 1, 0.782608695652174, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.976744186046512, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 0.0909090909090909, 1, 1, 1, 1, 1, 1, 
0.724612736660929, 1, 1, 1, 0.230005227391532, 0, 0.4), `Non couvert - Sous le seuil de 20 élèves (nb)` = c(0L, 
0L, 100L, 43L, 0L, 688L, 379L, 1085L, 337L, 116L, 71L, 51L, 0L, 
0L, 0L, 0L, 0L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 43L, 0L, 0L), `Non couvert - Sous le seuil de 20 élèves (%)` = c(0, 
0, 0.173913043478261, 0.0826923076923077, 0, 0.361534419337888, 
0.224393132030787, 0.194828514993715, 0.110130718954248, 0.375404530744337, 
0.206997084548105, 0.226666666666667, 0, 0, 0, 0, 0, 0.0058252427184466, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0112388917929953, 0, 0), `Non couvert - Nouvelle formation (nb)` = c(0L, 
0L, 0L, 0L, 5L, 9L, 6L, 0L, 0L, 34L, 82L, 87L, 23L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L), `Non couvert - Nouvelle formation (%)` = c(0, 
0, 0, 0, 0.263157894736842, 0.0047293746715712, 0.00355239786856128, 
0, 0, 0.110032362459547, 0.239067055393586, 0.386666666666667, 
0.92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
), `Non couvert - code certification inconnu (nb)` = c(67L, 1L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 2L, 0L, 0L, 0L, 
0L, 0L, 9L, 1L, 86L, 10L, 1L, 0L, 12L, 0L, 5L, 5L, 0L, 0L, 0L, 
0L, 11L, 11L, 0L, 0L, 0L, 0L, 0L, 0L, 375L, 0L, 0L, 0L, 0L, 0L, 
2L, 0L, 39L, 0L, 0L), `Non couvert - code certification inconnu (%)` = c(0.985294117647059, 
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.666666666666667, 0, 
0, 0, 0, 0, 1, 1, 0.924731182795699, 0.172413793103448, 1, 0, 
0.27906976744186, 0, 0.555555555555556, 0.714285714285714, 0, 
0, 0, 0, 0.846153846153846, 0.0909090909090909, 0, 0, 0, 0, 0, 
0, 0.670840787119857, 0, 0, 0, 0, 0, 0.0476190476190476, 0, 0.0101934134866702, 
0, 0), `Non couvert - UAI Inconnu (nb)` = c(1L, 0L, 0L, 0L, 0L, 
10L, 0L, 187L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 2L, 0L, 220L, 3L, 
3L, 0L, 0L, 2L, 5L, 0L, 1L, 2L, 0L, 0L, 0L, 10L, 0L, 0L, 0L, 
0L, 0L, 29L, 1L, 44L, 2L, 0L, 0L, 24L, 0L, 0L, 0L, 349L, 0L, 
1L, 0L, 182L, 0L, 0L), `Non couvert - UAI Inconnu (%)` = c(0.0147058823529412, 
0, 0, 0, 0, 0.00525486074619023, 0, 0.0335787394505297, 0, 0.00323624595469256, 
0, 0, 0, 0, 0, 0.0869565217391304, 0, 0.427184466019417, 0.0154639175257732, 
0.0125523012552301, 0, 0, 0.021505376344086, 0.0862068965517241, 
0, 0.0256410256410256, 0.0465116279069767, 0, 0, 0, 0.192307692307692, 
0, 0, 0, 0, 0, 0.591836734693878, 0.2, 0.330827067669173, 0.0303030303030303, 
0, 0, 0.0429338103756708, 0, 0, 0, 0.600688468158348, 0, 0.0238095238095238, 
0, 0.047569262937794, 0, 0), `Non couvert - Territoire mal couvert (nb)` = c(0L, 
0L, 0L, 2L, 0L, 3L, 10L, 3L, 39L, 0L, 7L, 0L, 0L, 0L, 0L, 1L, 
0L, 1L, 0L, 2L, 0L, 0L, 0L, 0L, 0L, 0L, 2L, 0L, 0L, 0L, 0L, 0L, 
0L, 2L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 
0L, 0L, 2L, 0L, 0L), `Non couvert - Territoire mal couvert (%)` = c(0, 
0, 0, 0.00384615384615385, 0, 0.00157645822385707, 0.0059206631142688, 
0.000538696354821332, 0.0127450980392157, 0, 0.0204081632653061, 
0, 0, 0, 0, 0.0434782608695652, 0, 0.00194174757281553, 0, 0.00836820083682008, 
0, 0, 0, 0, 0, 0, 0.0465116279069767, 0, 0, 0, 0, 0, 0, 0.00625, 
0, 0.00826446280991736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00172117039586919, 
0, 0, 0, 0.000522739153162572, 0, 0), `Non couvert - Plusieurs formations en annéee terminale associées (nb)` = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
11L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 4L, 0L, 0L, 
0L, 0L, 1L, 0L, 0L), `Non couvert - Plusieurs formations en annéee terminale associées (%)` = c(0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0213592233009709, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0.000261369576581286, 0, 0), 
    `Non couvert - Plusieurs certifications associées au départ dont une seule est couverte (nb)` = c(0L, 
    0L, 0L, 0L, 0L, 5L, 0L, 1L, 11L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L), `Non couvert - Plusieurs certifications associées au départ dont une seule est couverte (%)` = c(0, 
    0, 0, 0, 0, 0.00262743037309511, 0, 0.000179565451607111, 
    0.00359477124183007, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000261369576581286, 0, 0), 
    `Non couvert - Sans raison évidente (nb)` = c(0L, 0L, 354L, 
    456L, 14L, 299L, 124L, 2248L, 277L, 103L, 142L, 42L, 2L, 
    0L, 1L, 3L, 4L, 280L, 191L, 234L, 0L, 0L, 5L, 43L, 0L, 1L, 
    19L, 0L, 4L, 2L, 1L, 0L, 9L, 318L, 2L, 105L, 1L, 4L, 6L, 
    0L, 0L, 0L, 160L, 1L, 10L, 0L, 6L, 1L, 0L, 6L, 497L, 0L, 
    4L), `Non couvert - Sans raison évidente (%)` = c(0, 0, 
    0.615652173913043, 0.876923076923077, 0.736842105263158, 
    0.157120336311088, 0.0734162226169331, 0.403663135212785, 
    0.0905228758169935, 0.333333333333333, 0.41399416909621, 
    0.186666666666667, 0.08, 0, 0.333333333333333, 0.130434782608696, 
    1, 0.543689320388349, 0.984536082474227, 0.97907949790795, 
    0, 0, 0.0537634408602151, 0.741379310344828, 0, 0.0256410256410256, 
    0.441860465116279, 0, 0.444444444444444, 0.285714285714286, 
    0.0192307692307692, 0, 1, 0.99375, 0.153846153846154, 0.867768595041322, 
    0.0204081632653061, 0.8, 0.0451127819548872, 0, 0, 0, 0.286225402504472, 
    1, 1, 0, 0.0103270223752151, 1, 0, 1, 0.129900679560899, 
    0, 0.16)), row.names = c(NA, -53L), class = c("tbl_df", "tbl", 
"data.frame"))%>% 
  knitr::kable()
```

###### En fonction du périmètre des formation et du moment de l'appariement (sans api Inserjeunes, avec API Inserjeunes et avec les efforts d'appariement : stats_parcoursup_catalogue_Couverture_insertion_avant_MIJ_synthese )

```{r stats_parcoursup_catalogue_Couverture_insertion_avant_MIJ_synthese, echo=FALSE}
structure(list(`Scope campagne 2025` = c("Non", "Oui"), `Nombre de formations` = c(3018L, 
18406L), `Part du  catalogue` = c(0.140870052277819, 0.859129947722181
), `Couvert initialement (nb)` = c(10L, 5277L), `Couvert initialement (%)` = c(0.00331345261762757, 
0.286699989133978), `Couvert par api (nb)` = c(41L, 7314L), `Couvert par api (%)` = c(0.013585155732273, 
0.397370422688254), `Couvert (nb)` = c(43L, 9896L), `Couvert (%)` = c(0.0142478462557985, 
0.537650766054547), `Impact api (nb)` = c(31L, 2037L), `Impact api (Pts)` = c(0.0102717031146455, 
0.110670433554276), `Impact appariement (nb)` = c(2L, 2582L), 
    `Impact appariement (Pts)` = c(0.000662690523525513, 0.140280343366294
    ), `Impact Global (nb)` = c(33L, 4619L), `Impact Global (Pts)` = c(0.010934393638171, 
    0.250950776920569)), row.names = c(NA, -2L), class = c("tbl_df", 
"tbl", "data.frame"))%>% 
  knitr::kable()
```
