feat(transport) : synchronisation du référentiel codes IDTF (ERP-149) #101

Merged
matthieu merged 16 commits from feat/erp-149-idtf-sync into develop 2026-06-15 15:45:25 +00:00

16 Commits

Author SHA1 Message Date
matthieu 6f545ea1f4 Merge branch 'develop' into feat/erp-149-idtf-sync
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 2m33s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m23s
2026-06-15 15:31:10 +00:00
matthieu 521c1dec9f Merge branch 'develop' into feat/erp-149-idtf-sync
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Has been cancelled
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Has been cancelled
2026-06-15 15:25:47 +00:00
Matthieu b51c3821a8 fix(transport) : exclure les tables IDTF du schema_filter Doctrine (ERP-149)
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 1m25s
Les tables idtf_product / idtf_sync_log sont des referentiels DBAL bruts
(sans entite ORM, synchronises par app:idtf:sync). Sans exclusion du
schema_filter, doctrine:schema:update --force les droppe juste apres la
migration dans test-db-setup, cassant SyncIdtfCommandTest (relation
"idtf_product" does not exist). Meme correctif que QUALIMAT (#99).
2026-06-15 17:19:06 +02:00
matthieu 28ddfafb71 Merge branch 'develop' into feat/erp-149-idtf-sync
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Has been cancelled
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Has been cancelled
2026-06-15 15:14:40 +00:00
matthieu 67bf03f844 Merge branch 'develop' into feat/erp-149-idtf-sync
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Failing after 2m35s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Has been cancelled
2026-06-15 15:10:31 +00:00
matthieu f9042c4768 Merge branch 'develop' into feat/erp-149-idtf-sync
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Failing after 2m38s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m22s
2026-06-15 14:45:33 +00:00
Matthieu b1b1da69db Merge remote-tracking branch 'origin/develop' into feat/erp-149-idtf-sync
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Has been cancelled
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Has been cancelled
# Conflicts:
#	config/packages/http_client.yaml
#	makefile
2026-06-15 16:45:10 +02:00
matthieu c55330a8a3 Merge branch 'feat/erp-39-qualimat-sync' into feat/erp-149-idtf-sync 2026-06-15 13:58:43 +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 c888a45cc4 chore(transport) : User-Agent navigateur neutre pour les syncs externes
Remplace l'UA 'Starseed-ERP' par un UA navigateur neutre : évite les filtres anti-bot des sources (qualimat.org WordPress/WAF, icrt-idtf.com) sans révéler l'application.
2026-06-12 15:57:59 +02:00
tristan abe663d355 feat(transport) : synchronisation du référentiel codes IDTF (ERP-149)
Commande console app:idtf:sync : récupère l'export Excel des codes IDTF (régimes de nettoyage transport) depuis icrt-idtf.com, le parse et synchronise une table référentielle (upsert sur (schema, idtf_number) + soft-delete + journal). Scope road ; discriminant schema road/water conservé.

- migration : tables idtf_product + idtf_sync_log (COMMENT ON COLUMN sur chaque colonne, unique (schema, idtf_number), cas_numbers JSONB)
- IdtfSheetParser : parsing pur d'une matrice (détection dynamique de l'en-tête, mapping par libellé, CAS split, date dd-mm-yyyy -> ISO) + tests unitaires
- SyncIdtfCommand : options --schema / --file / --dry-run, POST avec fields[] explicites (export 11 colonnes), upsert DBAL transactionnel
- cible make idtf-sync
- tests fonctionnels via .xlsx généré (parsing/upsert/journal/soft-delete)

Réutilise framework.http_client (activé pour QUALIMAT, ERP-39). phpoffice/phpspreadsheet déjà présent.
2026-06-12 15:49:28 +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