Rangs Limites
Cet outil permet d'apprécier les choix de postes accessibles pour un rang de classement donné sur les années post R3C (à partir des ECNi 2017 jusqu'aux derniers ECNi)
Sur un seul tableau, est affiché, dans chaque case, le nombre d'année où le poste aurait été accessible.
- En rouge : Jamais accessible à ce classement
- En Jaune : Accessible sur au moins un an (mais pas toutes les années)
- En vert : Accessible toutes les années jusqu'aux derniers ECNi
⚠ Ces informations sont données à titre indicatif et ne peuvent constituer une quelconque garantie pour les procédures de choix à venir
Toutes les données exploitées par cet outil proviennent du site cng.sante.fr et de son application
CELINE. Pour toute information officielle, veuillez vous référer à ces derniers.
Résultats";
$html = "
";
// On va récupérer tous les rangs limited dispo triés par idChoix
//Mysql
$reqRL = $db->query('SELECT idChoix, annee, rangLimite FROM dataset');
//pgsql
// $reqRL = $db->query('SELECT dataset."idChoix", annee, dataset."rangLimite" FROM dataset');
$rangLimites = $reqRL->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC);
$inputClassement = (int) $_GET["classement"];
//////////////////////////////////
// Calcul et affichage des données
//////////////////////////////////
// v2. Conversion du filtre spé/ville de l'utilisateur
// On croise l'array source de données avec les id sélectionnés via le GET (ce qui sécurise les données en plus)
// array_intersect_key(array_source, clés_à_garder)
$cityDataset = ($isTriVilleValid === TRUE) ? array_intersect_key($citySourceDataset, array_flip($_GET["v"])) : $citySourceDataset;
$specialityDatasetAbrev = ($isTriSpeValid === TRUE) ? array_intersect_key($specialitySourceDatasetAbrev, array_flip($_GET["s"])) : $specialitySourceDatasetAbrev;
$specialityDataset = ($isTriSpeValid === TRUE) ? array_intersect_key($specialitySourceDataset, array_flip($_GET['s'])) : $specialitySourceDataset;
// Affichage de la 1ère ligne = Titre des colonnes + infobulles (via BootstrapJS)
$html .= "
| ";
foreach ($specialityDatasetAbrev as $speId => $specialityName) {
// $html .= "".$specialityName." | ";
$html .= "".$specialityName." | ";
}
$html .= "
";
// Affichage de la suite du tableau avec le calcul
foreach ($cityDataset as $cityId => $cityName) {
// On gère la séparation des différentes régions entre elles (représentées dans le csv villes par les lignes XX_:XX)
// La notation des lignes de séparation est sous forme XX_x car si on laissait XX, la fonction getCsvToArrayKeyValue
// ne retourne la position que pour la 1ère occurence de XX;XX
// La manière de fix ça de manière la plus opti et sale, c'est de faire un substr et de tester les 2 premiers charactères
// si ils sont égaux à XX, on fait une séparation
if (strpos($cityId, "XX") !== FALSE) {
$html .= " | ";
foreach ($specialityDatasetAbrev as $speId => $specialityName) {
$html .= "".$specialityName." | ";
}
$html .= "";
continue;
}
$html .= "
|---|
| ".$cityName." | ";
foreach ($specialityDatasetAbrev AS $specialityId => $specialityName) {
$idChoice = "0".$cityId.$specialityId;
if (!isset($rangLimites[$idChoice])) {
$nbAnneePropose = 0;
$nbPossibleAnneePropose = 0;
} else {
$nbAnneePropose = count($rangLimites[$idChoice]);
$nbPossibleAnneePropose = 0;
foreach ($rangLimites[$idChoice] as $rangLimite) {
if ((int) $rangLimite["rangLimite"] >= $inputClassement) {$nbPossibleAnneePropose++;}
}
}
// Affichage de la cellule
$html .= " $nbPossibleAnneePropose && $nbPossibleAnneePropose === 1):
$html .= "last-choice";
break;
case ($nbAnneePropose > $nbPossibleAnneePropose && $nbPossibleAnneePropose !== 1):
$html .= "half-choices";
break;
case ($nbAnneePropose === $nbPossibleAnneePropose):
$html .= "all-choices";
break;
}
$html .= "\">";
if ($nbPossibleAnneePropose > 0) {
$html .= $nbPossibleAnneePropose;
} else if ($nbPossibleAnneePropose === 0 && $nbAnneePropose !== 0) {
$html .= "0";
}
$html .= " | ";
}
$html .= "
";
}
$html .= "
";
echo $html;
?>