# WT7 — Sous-ressource Contacts (ticket 1.8 / ERP-160) > ```bash > git fetch origin > git worktree add ../sb-erp160-contacts -b feat/erp-160-carrier-contacts origin/develop > cd ../sb-erp160-contacts && claude > ``` > **Base** : `origin/develop` **après merge de WT3**. Parallèle à WT5/WT6/WT8/WT9. --- ## Prompt à coller Projet Starseed (Symfony 8 / API Platform 4, DDD). Lis `CLAUDE.md`, `.claude/rules/backend.md`. Charge le skill `backend-entity-conventions`. **Miroir** : `SupplierContactProcessor.php` (`src/Module/Commercial/…/State/Processor/`). **Mission** : opérations d'écriture sur les contacts transporteur. **Spec** : `spec-back.md § 4.5` + RG-4.08. **À livrer** : - `POST /api/carriers/{id}/contacts`, `PATCH`/`DELETE /api/carrier_contacts/{id}` (security `manage`) — resource/processor dédiés à `CarrierContact`. - **RG-4.08** : bloc valide si **≥ 1 champ rempli** (CHECK `chk_carrier_contact_filled` côté migration WT3 + validation Processor) ; **max 2 téléphones**. **Tests à écrire** : contact vide → 422 ; 1 champ → 200/201 ; 3ᵉ téléphone → 422. **Scope STRICT** : uniquement `CarrierContact`. **NE TOUCHE PAS** `CarrierFixtures` (WT10), `Carrier`, les autres sous-ressources. Messages FR. Si le CHECK `chk_carrier_contact_filled` manque (WT3 ne l'a pas posé), valide côté Processor et signale-le à la conv maître. **Fini quand** : `make test` vert + `make php-cs-fixer-allow-risky`. Commit (`--no-verify` si vert), puis **ouvre la PR** : ```bash git push -u origin feat/erp-160-carrier-contacts tea pr create --base develop --head feat/erp-160-carrier-contacts \ --title "feat(transport) : sous-ressource contacts transporteur (ERP-160)" \ --description "POST/PATCH/DELETE carrier_contact + RG-4.08 (≥1 champ, max 2 tel). Ticket ERP-160." ``` Puis labellise via l'API Gitea. Cible **develop**. Aucune mention IA.