feat(transport) : synchronisation du référentiel transporteurs QUALIMAT (ERP-39) #99

Merged
matthieu merged 9 commits from feat/erp-39-qualimat-sync into develop 2026-06-15 14:40:17 +00:00

9 Commits

Author SHA1 Message Date
matthieu 4a3d903838 Merge branch 'develop' into feat/erp-39-qualimat-sync
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 2m36s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m20s
2026-06-15 14:40:06 +00:00
Matthieu 2324dee57e fix(transport) : exclure les tables qualimat du schema_filter
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 2m38s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m23s
Les tables `qualimat_carrier` et `qualimat_sync_log` sont des tables DBAL
brutes (referentiel synchronise par `app:qualimat:sync`, hors ORM). Sans
exclusion du `schema_filter`, `doctrine:schema:update --force` (lance par le
bootstrap CI / make test-db-setup juste apres les migrations) les considere
comme orphelines et genere un DROP TABLE -> la base de test perd les tables et
SyncQualimatCommandTest casse (relation qualimat_carrier does not exist).

Meme traitement que `audit_log` : creation/suppression pilotees par migration,
schema_filter les ignore.
2026-06-15 16:35:44 +02:00
matthieu 52152efecb Merge branch 'develop' into feat/erp-39-qualimat-sync
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Failing after 2m41s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m28s
2026-06-15 14:03:44 +00:00
matthieu 5426416558 Merge branch 'feat/erp-150-module-transport' into feat/erp-39-qualimat-sync 2026-06-15 13:58:27 +00:00
Matthieu 5def89c7f3 Merge remote-tracking branch 'origin/develop' into feat/erp-150-module-transport
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 2m42s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m28s
# Conflicts:
#	config/modules.php
2026-06-15 15:56:50 +02:00
tristan 0b9aaef38e fix(transport) : securiser la synchro QUALIMAT (revue ERP-39)
- garde-fou anti-desactivation de masse : fetchRemote leve sur un payload
  non-list (2xx inattendu) et la commande abandonne sans ecriture si aucune
  ligne exploitable, au lieu de soft-delete tout le referentiel
- verrou consultatif pg_try_advisory_lock pour serialiser les runs (anti-overlap)
- deduplication par SIRET dans le mapper (rows_upserted = transporteurs distincts)
- upsert par paquets (INSERT groupe) au lieu d'un aller-retour par ligne
- migration des tables qualimat deplacee vers le namespace modulaire Transport
  (+ enregistrement du path dans doctrine_migrations.yaml)
- tests : deduplication + abandon sur source vide
2026-06-15 10:20:53 +02:00
tristan c8bff68373 chore(transport) : ajouter la cible make qualimat-sync (ERP-39) 2026-06-12 15:19:13 +02:00
tristan b444061237 feat(transport) : synchronisation du référentiel transporteurs QUALIMAT (ERP-39)
Commande console app:qualimat:sync : récupère les opérateurs de transport agréés depuis l'API publique qualimat.org, normalise et synchronise une table référentielle (upsert sur le SIRET + soft-delete des absents + journal). Prévue pour un cron quotidien.

- migration : tables qualimat_carrier + qualimat_sync_log (COMMENT ON COLUMN sur chaque colonne)
- QualimatRowMapper : normalisation pure (SIRET sans espaces, date dd/mm/yyyy -> ISO, skip sans SIRET) + tests unitaires
- SyncQualimatCommand : options --file / --ppp / --dry-run, upsert DBAL transactionnel
- activation de framework.http_client
- tests fonctionnels de la commande (upsert/normalisation/journal/soft-delete)
2026-06-12 15:03:28 +02:00
tristan 5f3da7022b feat(transport) : créer le module Transport (ERP-150)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 2m29s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m41s
Module Transport (ID transport, non requis) destiné à héberger les référentiels externes synchronisés par commandes console (codes IDTF ERP-149, transporteurs QUALIMAT ERP-39).

- TransportModule.php avec permissions() vide à ce stade
- activation dans config/modules.php
- layer Nuxt front minimal (pas d'écran ni d'item sidebar)
2026-06-12 14:35:16 +02:00