Aller au contenu

Extraction des sessions OGDPC

Version métier : voir Extraction des sessions OGDPC.

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).

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 :

Fenêtre de terminal
docker exec $APP_NAME php bin/console scheduled:ogdpc-extract-sessions

Options (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éfaut sys_get_temp_dir())
  • --bucket=<name> — bucket MinIO (défaut erevo-lms)
  1. Authentification : OgdpcClientService::login(). Un échec lève une ScheduledCommandException et fait échouer le job.
  2. 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').
  3. 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.
  4. Pour chaque session :
    • Skip si status !== 'ouverte' ou parts vide.
    • Parse endDate (d/m/Y) en DateTimeImmutable ; skip si strictement passée.
    • Si l’action est au format Classe virtuelle, récupère le nom de l’intervenant via getSessionIntervenant($sessionInternalId).
    • Sessions multi-parts (EPP / IP) : extrait continuing_education_end_date (fin de la première part) et second_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.
  5. CSV : UTF-8 avec BOM, séparateur ;, écrit dans --output-csv ou sys_get_temp_dir().
  6. Upload MinIO (sauf --skip-upload) :
    • PutObject Bucket=<bucket> Key=dpc-extract/ogdpc_sessions_<timestamp>.csv
    • PutObject Bucket=<bucket> Key=dpc-extract/ogdpc_sessions_latest.csv (alias overwrite)
    • Un échec S3 lève une ScheduledCommandException.
  7. Rapport final : nombre d’actions traitées, de sessions, d’erreurs partielles.

Aucune écriture Doctrine. Commande en lecture côté OGDPC, écriture fichier côté MinIO.

  • 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 section Errors en fin de run. Elles ne font pas échouer la commande (exit SUCCESS).
  • Pas de retry applicatif. Les timeouts HTTP remontent depuis OgdpcClientService.
  • Portail OGDPC (OgdpcClientService) — credentials via $OGDPC_PASSWORD.
  • MinIO / S3 (Aws\S3\S3Client) — bucket erevo-lms, préfixe dpc-extract/.
  • Logs : GitLab > Build > Pipelines > ogdpc_extract_sessions (sortie SymfonyStyle verbeuse : titre, année, compteurs, warnings).
  • Artefact : dpc-extract/ogdpc_sessions_latest.csv sur MinIO — diff avec le précédent pour diagnostiquer.
  • Alerting : Sentry capture les ScheduledCommandException et toute exception PHP.
  • Commande : src/Command/Scheduled/ExtractOgdpcSessionsCommand.php
  • Job CI : ci-jobs/.scheduled-ci.yml (job ogdpc_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