diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4ef4fa7439079b4518e66074865645e658ca03c2..ac72576baf07a16b5120016074f16b324e574229 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,19 +1,12 @@
-image: localhost:5000/unicaen-dev-php7.0-apache
+image: localhost:5000/unicaen-dev-php7.4-apache
   
 stages:
-  - test
   - release
 
 cache:
   paths:
     - vendor/
 
-test:
-  stage: test
-  script:
-    - composer install --dev
-    - composer test module/ImportData
-
 release_job:
   stage: release
   image: registry.gitlab.com/gitlab-org/release-cli:latest
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 22a7efacd8c0ab2b29151755644400e3c039ea2d..87917f60def8429f534cf5c4f35c67648223df8c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,15 @@
 Journal des modifications
 =========================
 
+2.3.0
+-----
+- Correction du mapping de l'entité Doctorant.
+- Mise à jour de vues dans la base de données Apogée/Physalis.
+
+2.2.0
+-----
+- Migration apigility => laminas-api-tools.
+
 2.1.0
 -----
 - Service 'thèse' : ajout du code SISE de la discipline.
diff --git a/dist/SQL/apogee/01-vues-apogee-communes.sql b/dist/SQL/apogee/01-vues-apogee-communes.sql
index 348d7673ec1169b107085f6c56560fc3eef663a1..2fa130068aa991965a0f1d9ff21e40686332a121 100644
--- a/dist/SQL/apogee/01-vues-apogee-communes.sql
+++ b/dist/SQL/apogee/01-vues-apogee-communes.sql
@@ -45,19 +45,6 @@ where cod_vap in (
                   'ETB_LIB_TIT_RESP',
                   'ETB_LIB_NOM_RESP'
     )
-      -- + variables définies manuellement :
-union all
-select
-    id as source_code,
-    source_id,  -- identifiant unique de la source
-    id,
-    cod_vap,
-    lib_vap,
-    par_vap,
-    DATE_DEB_VALIDITE,
-    DATE_FIN_VALIDITE
-from
-    V_SYGAL_VARIABLE_MANU
 /
 
 create or replace view V_SYGAL_INDIVIDU_V2 as
diff --git a/dist/SQL/apogee/02-vues-apogee-etab.sql b/dist/SQL/apogee/02-vues-apogee-etab.sql
index 7a3d14411e05a7ee8802cddc4eb4c7900e5edbb0..9b416973f10d30acb57d468fcedebed49024b4ed 100644
--- a/dist/SQL/apogee/02-vues-apogee-etab.sql
+++ b/dist/SQL/apogee/02-vues-apogee-etab.sql
@@ -11,41 +11,6 @@
 -- ATTENTION: script à personnaliser!
 --
 
---
--- Vue fournissant les "variables d'environnement" requises.
---
-create view V_SYGAL_VARIABLE_MANU as
-  select
-    'apogee' as source_id,
-    'EMAIL_ASSISTANCE' as id,
-    'EMAIL_ASSISTANCE' as cod_vap,
-    'Adresse mail de l''assistance utilisateur' as lib_vap,
-    'assistance-sygal@univ.fr' as par_vap, -----------------------------> à personnaliser
-    to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE,
-    to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE
-  from dual
-  union all
-  select
-    'apogee' as source_id,
-    'EMAIL_BU' as id,
-    'EMAIL_BU' as cod_vap,
-    'Adresse mail de contact pour les aspects BU' as lib_vap,
-    'bu@univ.fr' as par_vap, ------------------------------------------> à personnaliser
-    to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE,
-    to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE
-  from dual
-  union all
-  select
-    'apogee' as source_id,
-    'EMAIL_BDD' as id,
-    'EMAIL_BDD' as cod_vap,
-    'Adresse mail de contact pour les aspects Doctorat' as lib_vap,
-    'doctorat@univ.fr' as par_vap, -----------------------------------------> à personnaliser
-    to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE,
-    to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE
-  from dual
-/
-
 --
 -- Vue traduisant les codes rôles en usage dans votre établissement vers les codes compris par SyGAL.
 --
diff --git a/dist/SQL/physalis/02-vues-physalis-etab.sql b/dist/SQL/physalis/02-vues-physalis-etab.sql
index 3b14a119ea3289075717ac9349740c1af11c1e01..983edf140fec2c9fc584cf7309d906cf57067585 100644
--- a/dist/SQL/physalis/02-vues-physalis-etab.sql
+++ b/dist/SQL/physalis/02-vues-physalis-etab.sql
@@ -59,39 +59,6 @@ select
     to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE
 from dual
 union all
-select
-    'physalis' as source_id,
-    'EMAIL_ASSISTANCE' as SOURCE_CODE,
-    'EMAIL_ASSISTANCE' as id,
-    'EMAIL_ASSISTANCE' as cod_vap,
-    'Adresse mail de l''assistance utilisateur' as lib_vap,
-    'assistance-sygal@univ-exemple.fr' as par_vap,
-    to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE,
-    to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE
-from dual
-union all
-select
-    'physalis' as source_id,
-    'EMAIL_BU' as SOURCE_CODE,
-    'EMAIL_BU' as id,
-    'EMAIL_BU' as cod_vap,
-    'Adresse mail de contact de la BU' as lib_vap,
-    'bu-sygal@univ-exemple.fr' as par_vap,
-    to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE,
-    to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE
-from dual
-union all
-select
-    'physalis' as source_id,
-    'EMAIL_BDD' as SOURCE_CODE,
-    'EMAIL_BDD' as id,
-    'EMAIL_BDD' as cod_vap,
-    'Adresse mail de contact du bureau des doctorats' as lib_vap,
-    'doctorat-sygal@univ-exemple.fr' as par_vap,
-    to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE,
-    to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE
-from dual
-union all
 select
     'physalis' as source_id,
     'TRIBUNAL_COMPETENT' as SOURCE_CODE,
diff --git a/doc/release-notes/2.3.0/apogee.sql b/doc/release-notes/2.3.0/apogee.sql
new file mode 100644
index 0000000000000000000000000000000000000000..a193db0490dd298979fb78f6baa85dc10984facb
--- /dev/null
+++ b/doc/release-notes/2.3.0/apogee.sql
@@ -0,0 +1,23 @@
+--
+-- Apogée.
+--
+
+create or replace view V_SYGAL_VARIABLE_V2 as
+select
+    cod_vap as source_code, -- Id unique
+    'apogee' as source_id,  -- identifiant unique de la source
+    cod_vap             as id,
+    cod_vap,
+    lib_vap,
+    par_vap,
+    to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE,
+    to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE
+from variable_appli
+where cod_vap in (
+    'ETB_LIB',
+    'ETB_ART_ETB_LIB',
+    'ETB_LIB_TIT_RESP',
+    'ETB_LIB_NOM_RESP'
+);
+
+drop view V_SYGAL_VARIABLE_MANU;
diff --git a/doc/release-notes/2.3.0/physalis.sql b/doc/release-notes/2.3.0/physalis.sql
new file mode 100644
index 0000000000000000000000000000000000000000..a1cf970d07c6e002db7bd598c58ec9bc18218a7c
--- /dev/null
+++ b/doc/release-notes/2.3.0/physalis.sql
@@ -0,0 +1,9 @@
+--
+-- Physalis.
+--
+
+-- Dans la vue V_SYGAL_VARIABLE_V2, supprimez les 3 lignes correspondant aux SOURCE_CODE suivants :
+--   - 'EMAIL_ASSISTANCE'
+--   - 'EMAIL_BU'
+--   - 'EMAIL_BDD'
+--
\ No newline at end of file
diff --git a/doc/release-notes/v2.2.0.md b/doc/release-notes/v2.2.0.md
new file mode 100644
index 0000000000000000000000000000000000000000..ea67acac1a5c6b4362764243890a172bc2847761
--- /dev/null
+++ b/doc/release-notes/v2.2.0.md
@@ -0,0 +1,40 @@
+Version 2.2.0
+=============
+
+Sources PHP
+-----------
+
+Sur le serveur d'application, placez-vous dans le répertoire du web service (sans doute `/var/www/sygal-import-ws`) 
+puis lancez les commandes suivantes pour installer la nouvelle version :
+```bash
+git fetch && git fetch --tags && git checkout --force 2.2.0 && rm -rf vendor/* && bash install.sh
+```
+
+Rechargez le service PHP-FPM :
+```bash
+service php7.4-fpm reload
+```
+
+
+Tests
+-----
+
+Vérifiez que l'API répond bien en lançant les commandes suivantes après les avoir adaptées à votre situation 
+(cf. éventuellement le [README.md](../../README.md)).
+
+- Interrogation du service `version` (base de données non sollicitée) :
+```bash
+TOKEN=$(echo -n 'sygal-app:motdepasse' | base64)
+curl --insecure --header "Accept: application/json" --header "Authorization: Basic ${TOKEN}" https://localhost/v2/version/current
+
+# Réponse attendue du genre :
+# {"id":"2.1.0","number":"2.1.0","date":"13\/06\/2022 09:53:53","_links":{"self":{"href":"https:\/\/localhost\/v2\/version\/2.1.0"}}}
+```
+
+- Interrogation du service `variable` (base de données sollicitée) :
+```bash
+curl --insecure --header "Accept: application/json" --header "Authorization: Basic ${TOKEN}" https://localhost/v2/variable/ETB_LIB_NOM_RESP
+
+# Réponse attendue du genre :
+# {"sourceCode":"ETB_LIB_NOM_RESP","sourceId":"apogee",[...],"id":"ETB_LIB_NOM_RESP","_links":{"self":{"href":"https:\/\/localhost\/v2\/variable\/ETB_LIB_NOM_RESP"}}}
+```
diff --git a/doc/release-notes/v2.3.0.md b/doc/release-notes/v2.3.0.md
new file mode 100644
index 0000000000000000000000000000000000000000..0fe94d136a0311571a1a01b53484de5b32c508c3
--- /dev/null
+++ b/doc/release-notes/v2.3.0.md
@@ -0,0 +1,26 @@
+Version 2.3.0
+=============
+
+Base de données
+---------------
+
+### Apogée
+Cf. [2.3.0/apogee.sql](2.3.0/apogee.sql).
+
+### Physalis
+Cf. [2.3.0/physalis.sql](2.3.0/physalis.sql).
+
+
+Sources PHP
+-----------
+
+Sur le serveur d'application, placez-vous dans le répertoire du web service (sans doute `/var/www/sygal-import-ws`) 
+puis lancez les commandes suivantes pour installer la nouvelle version :
+```bash
+git fetch && git fetch --tags && git checkout --force 2.3.0 && rm -rf vendor/* && bash install.sh
+```
+
+Rechargez le service PHP-FPM :
+```bash
+service php7.4-fpm reload
+```
diff --git a/install.sh b/install.sh
index 32b1490a7ec7c65701268789338a203d9aa78ad8..a788b3ccbe9d667601de540c0aaeb2ffe77b9f84 100755
--- a/install.sh
+++ b/install.sh
@@ -1,18 +1,27 @@
 #!/usr/bin/env bash
 
 #
-# This script runs required operations in order to set up the application.
+# Script d'installation des pré-requis de l'application.
 #
+# Usages :
+#   ./install.sh
+
+set -o errexit
 
 CURDIR=$(cd `dirname $0` && pwd)
+
 cd ${CURDIR}
 
 # Composer install
 composer install --no-interaction --no-suggest --prefer-dist --optimize-autoloader
 
+vendor/bin/doctrine-module orm:generate-proxies
 vendor/bin/doctrine-module orm:clear-cache:query
 vendor/bin/doctrine-module orm:clear-cache:metadata
 vendor/bin/doctrine-module orm:clear-cache:result
-vendor/bin/doctrine-module orm:generate-proxies
 
-composer development-disable
+vendor/bin/laminas-development-mode disable
+
+# Création ou vidange des répertoires de cache
+mkdir -p data/cache && chmod -R 777 data/cache && rm -rf data/cache/*
+mkdir -p data/DoctrineModule/cache && chmod -R 777 data/DoctrineModule/cache && rm -rf data/DoctrineModule/cache/*
diff --git a/module/ImportData/src/V2/Entity/Db/Mapping/ImportData.V2.Entity.Db.Doctorant.dcm.xml b/module/ImportData/src/V2/Entity/Db/Mapping/ImportData.V2.Entity.Db.Doctorant.dcm.xml
index 4121fd2e9e1958206cefe9c6d79ea0a7f8de8fe7..9de669a3e6dc3808af8d4f92b7dca63590b49272 100644
--- a/module/ImportData/src/V2/Entity/Db/Mapping/ImportData.V2.Entity.Db.Doctorant.dcm.xml
+++ b/module/ImportData/src/V2/Entity/Db/Mapping/ImportData.V2.Entity.Db.Doctorant.dcm.xml
@@ -4,7 +4,7 @@
                   xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="ImportData\V2\Entity\Db\Doctorant" table="SYGAL_DOCTORANT_V2">
         <id name="id" column="ID"/>
-        <field name="sourceCode" type="integer" column="SOURCE_CODE"/>
+        <field name="sourceCode" column="SOURCE_CODE"/>
         <field name="sourceId" column="SOURCE_ID" length="64"/>
         <field name="individuId" column="INDIVIDU_ID"/>
         <field name="ine" length="64" column="INE"/>