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 |
|
| Axe | Décision | Raison |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| API d'appel | Request DTOs dédiés (un par op) | Testable, futur-compatible avec buffering de drafts. |
|
| 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. |
|
| 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. |
|
| 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. |
|
| 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
|
## Enums
|
||||||
|
|
||||||
Conventions :
|
Conventions :
|
||||||
- **Backed-by-string** avec case name == valeur (ex : `case A = 'A'`).
|
- **Backed-by-string** : `.value` = code IPG exact (ce qui part dans le payload SOAP).
|
||||||
- Docblock sur chaque case avec le libellé issu du XSD (à titre informatif, pas exposé en runtime).
|
- 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).
|
- 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`
|
### `Malio\EdnotifBundle\Bovin\Enum\CauseEntree`
|
||||||
|
|
||||||
|
Source : `CauseEntree.XSD` + doc IPG Table 9.
|
||||||
|
|
||||||
```php
|
```php
|
||||||
enum CauseEntree: string
|
enum CauseEntree: string
|
||||||
{
|
{
|
||||||
case P = 'P'; // libellé à confirmer côté métier (Prêt ?)
|
case Achat = 'A'; // Entrée par achat
|
||||||
case A = 'A'; // libellé à confirmer côté métier (Achat ?)
|
case Naissance = 'N'; // Entrée par naissance
|
||||||
case N = 'N'; // libellé à confirmer côté métier (Naissance/Nouveau ?)
|
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`
|
### `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`
|
### `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 |
|
| 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(
|
$response = $this->ednotif->createEntree(new CreateEntreeRequest(
|
||||||
bovin: new BovinRef('FR', 'FR1234567890'),
|
bovin: new BovinRef('FR', 'FR1234567890'),
|
||||||
date: new DateTimeImmutable('2026-04-22'),
|
date: new DateTimeImmutable('2026-04-22'),
|
||||||
cause: CauseEntree::A,
|
cause: CauseEntree::Achat,
|
||||||
provenance: new ExploitationRef('FR', '12345678'),
|
provenance: new ExploitationRef('FR', '12345678'),
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user