# Trading cafe - echantillons et qualite

Page miroir: [coffee.en.md](coffee.en.md)

## BR-PT-COF-001 - Phase 1 echantillons cafe

Statut: active
Source: decision projet du 2026-06-29

### Regle consultant

Le trading cafe doit pouvoir piloter les echantillons rattaches aux lignes
d'achat et de vente.

Chaque echantillon porte:

- un type d'echantillon: offer, pre-shipment, shipment, arrival, stock,
  customer ou retained;
- un sens purchase ou sale;
- un cycle de vie: requested, received, sent to lab, under review, approved,
  rejected, expired, archived;
- une date d'expiration calculee depuis la date de demande/reception et la
  duree de vie de l'echantillon;
- des donnees de qualite physique et des liens vers les seances de cupping.

La compatibilite cafe est inactive par defaut et doit etre activee dans la
configuration `purchase_trade.configuration` avec le champ `Active coffee
compatibility`. Tant que l'option est inactive, les menus cafe et les pages
qualite cafe des lignes ne doivent pas etre visibles.

Les resultats de cupping sont saisis dans des seances:

- les proprietes/criteres de cupping sont parametrables;
- une seance definit une capacite de salle en nombre de tasses et un nombre de
  tasses par echantillon;
- chaque echantillon inscrit a la seance genere plusieurs tasses avec un code
  aveugle;
- plusieurs personnes peuvent saisir un resultat par tasse;
- les degustateurs voient uniquement l'origine et le type de cafe, pas le
  contrat ni le fournisseur;
- l'ordre de preparation propose les arabicas avant les blends/autres cafes et
  garde les robustas en fin de seance;
- la decision finale reste globale a l'echantillon de seance: approved,
  rejected ou re-cup.

Les lignes `purchase.line` et `sale.line` portent les specifications qualite
cibles du cafe: origine, process, variete, crop year, screen size, humidite
maximum, nombre de defauts maximum et score cup minimum.

### Notes developpeur

- Modeles/champs:
  - `coffee.sample`
  - `coffee.cupping.criterion`
  - `coffee.cupping.session`
  - `coffee.cupping.session.sample`
  - `coffee.cupping.cup`
  - `coffee.cupping.result`
  - `coffee.cupping.result.line`
  - `purchase_trade.configuration.active_coffee_compatibility`
  - `purchase.line.coffee_samples`
  - `sale.line.coffee_samples`
  - champs `coffee_*` sur `purchase.line` et `sale.line`
- Fichiers:
  - `modules/purchase_trade/coffee.py`
  - `modules/purchase_trade/coffee.xml`
  - `modules/purchase_trade/view/coffee_sample_*.xml`
  - `modules/purchase_trade/view/coffee_cupping_*.xml`
  - `modules/purchase_trade/view/purchase_line_form.xml`
  - `modules/purchase_trade/view/sale_line_form.xml`
- Points de vigilance:
  - l'expiration est pilotee par les domaines `Expired` et `Expiring soon`;
  - aucun blocage shipment/validation n'est introduit en phase 1;
  - la delegation labo reste une information de suivi, sans workflow labo
    complet;
  - les menus cafe sont inactifs par defaut et synchronises quand la
    configuration est sauvegardee.

## BR-PT-COF-002 - Phase 2 delegation labo

Statut: active
Source: decision projet du 2026-06-29

### Regle consultant

Un echantillon cafe peut etre delegue a un laboratoire. La delegation cree et
pilote des analyses labo rattachees a l'echantillon:

- cycle de vie analyse: draft, sent, received, accepted, rejected, cancelled;
- dates de demande, envoi, echeance et reception;
- reference de rapport labo;
- resultats physiques et organoleptiques: humidite, screen size, nombre de
  defauts, cup score;
- controle de conformite par rapport aux seuils de la ligne purchase/sale.

Le bouton `Send to lab` de l'echantillon cree une demande labo active si un
labo est renseigne et s'il n'existe pas deja une analyse ouverte.

## BR-PT-COF-003 - Phase 3 decision qualite consolidee

Statut: active
Source: decision projet du 2026-06-29

### Regle consultant

La decision qualite d'un echantillon est consolidee depuis:

- les seuils qualite de la ligne cible;
- la derniere analyse labo non annulee;
- les resultats moyens de cupping;
- les decisions de seance de cupping, dont `re-cup` et `rejected`.

L'echantillon expose un statut qualite (`pending`, `pass`, `warning`, `fail`)
et une decision recommandee (`approve`, `re-cup`, `reject`). Le bouton
`Evaluate quality` applique la recommandation: approbation, rejet ou retour en
revue si l'echantillon doit etre re-deguste.

Ces fonctions restent sous `Active coffee compatibility` et n'ajoutent pas de
blocage transverse sur les flux non cafe.
