Extraction des sessions OGDPC
Version métier : voir Extraction des sessions OGDPC.
Description
Section intitulée « Description »Commande qui interroge le portail organisme OGDPC via OgdpcClientService, récupère les actions DPC puis leurs sessions ouvertes dont l’échéance est future ou en cours, et consolide l’ensemble dans un CSV (ogdpc_sessions_<timestamp>.csv + alias ogdpc_sessions_latest.csv) uploadé sur MinIO (bucket erevo-lms, préfixe dpc-extract/).
Le CSV sert d’input aux commandes de rapprochement (Rapprochement des dates, Rapprochement des formateurs).
Déclenchement
Section intitulée « Déclenchement »Planification GitLab (via pipeline_schedules API, 2026-04-23) :
- Description :
Extrract ANDPC data - ID du schedule :
4217181 - Cron :
0 1 * * *(fuseau :Europe/Paris) — 01:00 Paris chaque jour. - Branche :
refs/heads/master - État : actif
- Variable injectée :
SCHEDULE_TYPE=ogdpc_extract
TODO(review) : la description GitLab contient un typo (
Extrract) et mentionne « ANDPC » alors que le job et la commande parlent d’« OGDPC ». À renommer dans GitLab > Build > Pipeline schedules pour rester cohérent.
Job CI : ogdpc_extract_sessions dans ci-jobs/.scheduled-ci.yml (stage ogdpc_extract).
Commande exécutée :
docker exec $APP_NAME php bin/console scheduled:ogdpc-extract-sessionsOptions (non utilisées par le schedule, disponibles en manuel) :
--year=<YYYY>(tableau, par défaut : année courante +-1)--skip-upload— n’upload pas le CSV sur MinIO--output-csv=/path/to.csv— chemin local du CSV (par défautsys_get_temp_dir())--bucket=<name>— bucket MinIO (défauterevo-lms)
Fonctionnement
Section intitulée « Fonctionnement »- Authentification :
OgdpcClientService::login(). Un échec lève uneScheduledCommandExceptionet fait échouer le job. - Années : par défaut année courante + année précédente (pour capter les sessions qui courent encore sur N-1).
$today = new DateTimeImmutable('today'). - Pour chaque année :
OgdpcClientService::getActions($year)→ liste des actions DPC de l’organisme.- Filtre
openSessions > 0. - Pour chaque action restante,
getSessionsForAction($actionInternalId)renvoie les sessions détaillées.
- Pour chaque session :
- Skip si
status !== 'ouverte'oupartsvide. - Parse
endDate(d/m/Y) enDateTimeImmutable; skip si strictement passée. - Si l’action est au format
Classe virtuelle, récupère le nom de l’intervenant viagetSessionIntervenant($sessionInternalId). - Sessions multi-parts (EPP / IP) : extrait
continuing_education_end_date(fin de la première part) etsecond_evaluation_start_date(début de la seconde part). - Ligne CSV :
reference,action_name,format,session_number,start_date,continuing_education_end_date,second_evaluation_start_date,end_date,hours,intervenant,participant_list_url.
- Skip si
- CSV : UTF-8 avec BOM, séparateur
;, écrit dans--output-csvousys_get_temp_dir(). - Upload MinIO (sauf
--skip-upload) :PutObject Bucket=<bucket> Key=dpc-extract/ogdpc_sessions_<timestamp>.csvPutObject Bucket=<bucket> Key=dpc-extract/ogdpc_sessions_latest.csv(alias overwrite)- Un échec S3 lève une
ScheduledCommandException.
- Rapport final : nombre d’actions traitées, de sessions, d’erreurs partielles.
Entités impactées
Section intitulée « Entités impactées »Aucune écriture Doctrine. Commande en lecture côté OGDPC, écriture fichier côté MinIO.
Gestion des erreurs
Section intitulée « Gestion des erreurs »ScheduledCommandException(catastrophique, fait échouer le job) :- login OGDPC échoué ;
- upload MinIO échoué.
- Erreurs transitoires (récupération d’une action, session ou intervenant) : accumulées dans
$errors, loggées en warning, listées en sectionErrorsen fin de run. Elles ne font pas échouer la commande (exitSUCCESS). - Pas de retry applicatif. Les timeouts HTTP remontent depuis
OgdpcClientService.
Dépendances externes
Section intitulée « Dépendances externes »- Portail OGDPC (
OgdpcClientService) — credentials via$OGDPC_PASSWORD. - MinIO / S3 (
Aws\S3\S3Client) — bucketerevo-lms, préfixedpc-extract/.
Observabilité
Section intitulée « Observabilité »- Logs :
GitLab > Build > Pipelines > ogdpc_extract_sessions(sortieSymfonyStyleverbeuse : titre, année, compteurs, warnings). - Artefact :
dpc-extract/ogdpc_sessions_latest.csvsur MinIO — diff avec le précédent pour diagnostiquer. - Alerting : Sentry capture les
ScheduledCommandExceptionet toute exception PHP.
Références code
Section intitulée « Références code »- Commande :
src/Command/Scheduled/ExtractOgdpcSessionsCommand.php - Job CI :
ci-jobs/.scheduled-ci.yml(jobogdpc_extract_sessions) - Services :
App\Service\OgdpcClientService,Aws\S3\S3Client - Exception :
App\Exceptions\ScheduledCommandException - Skills associés (debug manuel) :
ogdpc-login,ogdpc-navigate-action,ogdpc-navigate-session,ogdpc-extract-participants