docs : enums CauseEntree/Sortie avec libellés métier (A→Achat, H→PretOuPension, ...)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -15,7 +15,8 @@ Ajouter 2 méthodes à `BovinApiInterface` : `createEntree(CreateEntreeRequest)`
|
||||
| Axe | Décision | Raison |
|
||||
|---|---|---|
|
||||
| API d'appel | Request DTOs dédiés (un par op) | Testable, futur-compatible avec buffering de drafts. |
|
||||
| Codes métier (CauseEntree, CauseSortie, CategorieBovinIPG) | Enums backed-by-string, case names = codes IPG | Type-safe sans ambiguïté de traduction ; libellés documentés en phpdoc. |
|
||||
| Codes métier (CauseEntree, CauseSortie) | Enums backed-by-string, case names = libellés métier, `.value` = code IPG | Lecture explicite côté consommateur, SOAP reçoit le code via `.value`. |
|
||||
| `CategorieBovinIPG` | Enum backed-by-string, case names = codes 2-lettres IPG | 13 cases avec libellés XSD courts, pas de gain à les renommer. |
|
||||
| Code atelier | `?string` free-form | Pattern `[LABEM][1-9]` = 45 combinaisons, enum serait trop lourd. |
|
||||
| Réponse (choice BDNi pending / validée) | DTO plat avec `bool $pendingBdniValidation` + nullable fields | Cohérent avec les DTOs existants du bundle. |
|
||||
| Validation client-side | Aucune | EDNOTIF rejette via `EdnotifException` ; valeurs arrivent déjà validées en amont. |
|
||||
@@ -50,30 +51,46 @@ config/services.php enregistrer les 2 mappers + updater Bovin
|
||||
## Enums
|
||||
|
||||
Conventions :
|
||||
- **Backed-by-string** avec case name == valeur (ex : `case A = 'A'`).
|
||||
- Docblock sur chaque case avec le libellé issu du XSD (à titre informatif, pas exposé en runtime).
|
||||
- **Backed-by-string** : `.value` = code IPG exact (ce qui part dans le payload SOAP).
|
||||
- Case names = libellés métier pour `CauseEntree`/`CauseSortie` (lisibles côté consommateur).
|
||||
- Case names = codes 2-lettres pour `CategorieBovinIPG` (13 cases, libellés XSD courts, pas de gain à les renommer).
|
||||
- Docblock sur chaque case pour rappeler la correspondance.
|
||||
- Pas de méthode `libelle()` ni de `values()` — YAGNI, à ajouter si un besoin métier concret remonte (I18N, UI de sélection).
|
||||
|
||||
**Note sur les codes P/H/X** : la Table 9 IPG marque ces codes comme ambigus (entrée ET sortie selon le contexte). Côté WSDL EDNOTIF, cette ambiguïté n'existe pas : chaque op a son propre enum XSD restrictif (`CauseEntreeType` = {P, A, N}, `CauseSortieType` = {H, C, M, B, E, X}). Le sens est porté par l'op appelée, pas par le code. Le bundle n'a donc rien à faire de particulier à ce sujet.
|
||||
|
||||
### `Malio\EdnotifBundle\Bovin\Enum\CauseEntree`
|
||||
|
||||
Source : `CauseEntree.XSD` + doc IPG Table 9.
|
||||
|
||||
```php
|
||||
enum CauseEntree: string
|
||||
{
|
||||
case P = 'P'; // libellé à confirmer côté métier (Prêt ?)
|
||||
case A = 'A'; // libellé à confirmer côté métier (Achat ?)
|
||||
case N = 'N'; // libellé à confirmer côté métier (Naissance/Nouveau ?)
|
||||
case Achat = 'A'; // Entrée par achat
|
||||
case Naissance = 'N'; // Entrée par naissance
|
||||
case PretOuPension = 'P'; // Entrée par prêt ou pension
|
||||
}
|
||||
```
|
||||
|
||||
Note : les libellés exacts ne sont pas dans le XSD (pas de `<documentation>` sur les enumerations de `CauseEntree.XSD`). Laissés en "à confirmer côté métier" dans le docblock pour que Ferme complète ; la correctness de l'appel SOAP ne dépend que du code.
|
||||
|
||||
### `Malio\EdnotifBundle\Bovin\Enum\CauseSortie`
|
||||
|
||||
Même structure, 6 cases : `H, C, M, B, E, X`. Libellés à confirmer.
|
||||
Source : `CauseSortie.XSD` + doc IPG Table 9.
|
||||
|
||||
```php
|
||||
enum CauseSortie: string
|
||||
{
|
||||
case Boucherie = 'B'; // Sortie pour boucherie
|
||||
case Consommation = 'C'; // Sortie pour auto-consommation
|
||||
case Elevage = 'E'; // Sortie pour élevage ou vente
|
||||
case Mort = 'M'; // Sortie pour mort
|
||||
case PretOuPension = 'H'; // Sortie pour prêt ou pension (H sur sortie = équivalent du P sur entrée)
|
||||
case Autre = 'X'; // Autre cause (réservée reprise / données historiques)
|
||||
}
|
||||
```
|
||||
|
||||
### `Malio\EdnotifBundle\Bovin\Enum\CategorieBovinIPG`
|
||||
|
||||
13 cases documentés depuis les `<documentation>` du XSD :
|
||||
Source : `CategorieBovinIPG.XSD`. 13 cases documentés depuis les `<documentation>` du XSD :
|
||||
|
||||
| Case | Libellé XSD |
|
||||
|---|---|
|
||||
@@ -301,7 +318,7 @@ Mise à jour côté Ferme : `composer update malio/ednotif-bundle` une fois la P
|
||||
$response = $this->ednotif->createEntree(new CreateEntreeRequest(
|
||||
bovin: new BovinRef('FR', 'FR1234567890'),
|
||||
date: new DateTimeImmutable('2026-04-22'),
|
||||
cause: CauseEntree::A,
|
||||
cause: CauseEntree::Achat,
|
||||
provenance: new ExploitationRef('FR', '12345678'),
|
||||
));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user