Commit fd4e4393 authored by Anthony Gautreau's avatar Anthony Gautreau
Browse files

Pegase : iscedCode des programmes et des cours (CITE du diplôme SISE vers...

Pegase : iscedCode des programmes et des cours (CITE du diplôme SISE vers ISCED-F 2013), nomenclature DiplomeSise lue en flux et gardée dans pegase_diplome_sise
parent 66a6f6b9
Loading
Loading
Loading
Loading
+6 −2
Changes for README.md: 6 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -304,8 +304,8 @@ Les relations sont données en IRI (`"ounit": "/ounits/901"`). Une propriété s
| Ressource | Propriétés |
|---|---|
| ounit | `ounitId`, `ounitCode` (code de structure Pegase), `title`, `abbreviation`, `lastModified` |
| programme | `code`, `title`, `ects`, `eqfLevelProvided` (6, 7 ou 8), `languageOfInstruction`, `description` et `learningOutcomes` (syllabus de l'année), `length` (`2/2`), `elmLearningOpportunityType`, `levelInDiploma` (niveau SISE), `diplomaCode` et `diplomaTitle` (formation), `ounit`, `lastModified` |
| course | `code`, `title`, `ects`, `languageOfInstruction`, `academicTerm` (`1/2`, `2/2`), `description`, `learningOutcomes`, `prerequisites`, `bibliography`, `assessmentMethod` et `teachingMethod` (syllabus), `elmModeOfLearning`, `elmLearningActivityType` et `elmLearningOpportunityType`, `deprecated` (absent de la période la plus récente), `diplomaCode` et `diplomaTitle` (formation porteuse), `ounit`, `relatedProgramme`, `lastModified` |
| programme | `code`, `title`, `ects`, `eqfLevelProvided` (6, 7 ou 8), `languageOfInstruction`, `description` et `learningOutcomes` (syllabus de l'année), `length` (`2/2`), `elmLearningOpportunityType`, `iscedCode`, `levelInDiploma` (niveau SISE), `diplomaCode` et `diplomaTitle` (formation), `ounit`, `lastModified` |
| course | `code`, `title`, `ects`, `languageOfInstruction`, `academicTerm` (`1/2`, `2/2`), `description`, `learningOutcomes`, `prerequisites`, `bibliography`, `assessmentMethod` et `teachingMethod` (syllabus), `elmModeOfLearning`, `elmLearningActivityType` et `elmLearningOpportunityType`, `iscedCode`, `deprecated` (absent de la période la plus récente), `diplomaCode` et `diplomaTitle` (formation porteuse), `ounit`, `relatedProgramme`, `lastModified` |
| instance | `id` (`LAE112-2026-1`), `course`, `academicTermId` (`2026/2027-1/2`), `startDate`, `endDate`, `ects`, `languageOfInstruction`, `elmModeOfLearning`, `elmLearningActivityType` et `elmLearningOpportunityType` (pour cette période), `engagementHours`, `catalogueOunit` et `catalogueGroup` (composante et regroupement du catalogue), `lastModified` |

`lastModified` est la date de l'import.
@@ -318,6 +318,8 @@ Les champs ELM sont des codes des [vocabulaires européens](https://op.europa.eu

Codes acceptés dans `PEGASE_ELM_TYPES_HEURE` : `d46a826a39` apprentissage, `ff436ea7c9` cours en classe, `bf2e3a7bae` e-learning, `fd33e234ae` programme de formation, `bf5588ff84` stage, `4357e0e681` expérience professionnelle, `3c8bd58d62` TP, simulation, `c_5665a0ad` tutorat, `a7e556215a` recherche, `b660f5dcea` travail personnel, `59eaf34fab` bénévolat, `efff75e10a` atelier, séminaire ou conférence.

`iscedCode` liste les domaines ISCED-F 2013 du diplôme SISE de la formation (programme) ou de la formation porteuse (cours ; à défaut, ceux de ses programmes). Ils sont tirés du domaine CITE 1997 du diplôme (`citeDomaineFormation` de la nomenclature `DiplomeSise`) par la table de correspondance Eurostat FOET 1999 / ISCED-F 2013 : un domaine français qui en couvre plusieurs les donne tous (`224` Histoire, philosophie donne `0222` et `0223`).

La langue d'enseignement du syllabus est retenue quand elle est écrite en balises BCP 47 à code de langue sur deux lettres (`en`, `fr, en-GB`), sinon la langue vient de `PEGASE_LANGUES` (cours) ou vaut `fr` (programme).

### Créer et supprimer des utilisateurs
@@ -347,6 +349,8 @@ docker exec smile-connect-php bin/console app:import-data

`app:import-pegase` lit les années universitaires de `PEGASE_ANNEES_UNIVERSITAIRES` et remplace toutes les données Pegase. Les tables ne sont vidées qu'une fois Pegase entièrement lu, dans une transaction : en cas d'échec, les données précédentes restent servies. La commande refuse de tourner si `PEGASE_ENABLED` vaut `false` ou si la configuration est incomplète. Chaque exécution autorisée, réussie ou non, est inscrite dans la table `pegase_import_log`. La progression s'affiche étape par étape (l'avancement de l'enregistrement avec `-v`), ainsi que la durée et la mémoire utilisée.

Les domaines CITE des diplômes SISE sont gardés dans la table `pegase_diplome_sise` : la nomenclature `DiplomeSise` de Pegase (plus de 90 Mo) n'est relue que lorsqu'une formation importée a un diplôme absent de la table. Pour forcer sa relecture (nouvelle nomenclature annuelle), vider la table avant l'import (`TRUNCATE pegase_diplome_sise`).

```bash
docker exec smile-connect-php bin/console app:import-pegase
```
+30 −0
Changes for api/migrations/Version20261008183856.php: 30 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

declare(strict_types=1);

namespace DoctrineMigrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;

final class Version20261008183856 extends AbstractMigration
{
    public function getDescription(): string
    {
        return 'Pegase : ISCED des programmes et des cours, domaines CITE des diplômes SISE';
    }

    public function up(Schema $schema): void
    {
        $this->addSql('CREATE TABLE pegase_diplome_sise (code VARCHAR(255) NOT NULL, cite VARCHAR(255) DEFAULT NULL, PRIMARY KEY (code))');
        $this->addSql('ALTER TABLE course ADD isced_code JSON DEFAULT NULL');
        $this->addSql('ALTER TABLE programme ADD isced_code JSON DEFAULT NULL');
    }

    public function down(Schema $schema): void
    {
        $this->addSql('DROP TABLE pegase_diplome_sise');
        $this->addSql('ALTER TABLE course DROP isced_code');
        $this->addSql('ALTER TABLE programme DROP isced_code');
    }
}
+4 −0
Changes for api/src/Entity/Course.php: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -73,6 +73,10 @@ class Course
    #[ORM\Column(type: 'json', nullable: true)]
    public ?array $elmLearningOpportunityType = null;

    /** @var list<string>|null codes ISCED-F 2013 du domaine de formation */
    #[ORM\Column(type: 'json', nullable: true)]
    public ?array $iscedCode = null;

    #[ORM\Column]
    public bool $deprecated = false;

+19 −0
Changes for api/src/Entity/PegaseDiplomeSise.php: 19 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Domaine CITE d'un diplôme SISE, copie de la nomenclature Pegase DiplomeSise tenue par App\Pegase\DiplomesSise.
 */
#[ORM\Entity]
class PegaseDiplomeSise
{
    #[ORM\Id, ORM\Column]
    public string $code;

    /** Domaine de formation CITE 1997 (380), null s'il n'est pas renseigné */
    #[ORM\Column(nullable: true)]
    public ?string $cite = null;
}
+4 −0
Changes for api/src/Entity/Programme.php: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -50,6 +50,10 @@ class Programme
    #[ORM\Column(type: 'json', nullable: true)]
    public ?array $elmLearningOpportunityType = null;

    /** @var list<string>|null codes ISCED-F 2013 du domaine de formation */
    #[ORM\Column(type: 'json', nullable: true)]
    public ?array $iscedCode = null;

    #[ORM\Column(nullable: true)]
    public ?string $levelInDiploma = null;

Loading