<!-- Generated from docs_source/business by docs/tools/render_business_docs.py. -->

# 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:

<ul style="margin:0.65rem 0 1rem 1.1rem; padding-left:1rem; list-style-type:disc;">
<li style="margin:0.38rem 0;">un type d&#x27;echantillon: offer, pre-shipment, shipment, arrival, stock, customer ou retained;
</li>
<li style="margin:0.38rem 0;">un sens purchase ou sale;
</li>
<li style="margin:0.38rem 0;">un cycle de vie: requested, received, sent to lab, under review, approved, rejected, expired, archived;
</li>
<li style="margin:0.38rem 0;">une date d&#x27;expiration calculee depuis la date de demande/reception et la duree de vie de l&#x27;echantillon;
</li>
<li style="margin:0.38rem 0;">des donnees de qualite physique et des liens vers les seances de cupping.
</li>
</ul>

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:

<ul style="margin:0.65rem 0 1rem 1.1rem; padding-left:1rem; list-style-type:disc;">
<li style="margin:0.38rem 0;">les proprietes/criteres de cupping sont parametrables;
</li>
<li style="margin:0.38rem 0;">une seance definit une capacite de salle en nombre de tasses et un nombre de tasses par echantillon;
</li>
<li style="margin:0.38rem 0;">chaque echantillon inscrit a la seance genere plusieurs tasses avec un code aveugle;
</li>
<li style="margin:0.38rem 0;">plusieurs personnes peuvent saisir un resultat par tasse;
</li>
<li style="margin:0.38rem 0;">les degustateurs voient uniquement l&#x27;origine et le type de cafe, pas le contrat ni le fournisseur;
</li>
<li style="margin:0.38rem 0;">l&#x27;ordre de preparation propose les arabicas avant les blends/autres cafes et garde les robustas en fin de seance;
</li>
<li style="margin:0.38rem 0;">la decision finale reste globale a l&#x27;echantillon de seance: approved, rejected ou re-cup.
</li>
</ul>

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

<ul style="margin:0.65rem 0 1rem 1.1rem; padding-left:1rem; list-style-type:disc;">
<li style="margin:0.38rem 0;">Modeles/champs:
<ul style="margin:0.65rem 0 1rem 1.35rem; padding-left:1rem; list-style-type:circle;">
<li style="margin:0.38rem 0;"><code>coffee.sample</code>
</li>
<li style="margin:0.38rem 0;"><code>coffee.cupping.criterion</code>
</li>
<li style="margin:0.38rem 0;"><code>coffee.cupping.session</code>
</li>
<li style="margin:0.38rem 0;"><code>coffee.cupping.session.sample</code>
</li>
<li style="margin:0.38rem 0;"><code>coffee.cupping.cup</code>
</li>
<li style="margin:0.38rem 0;"><code>coffee.cupping.result</code>
</li>
<li style="margin:0.38rem 0;"><code>coffee.cupping.result.line</code>
</li>
<li style="margin:0.38rem 0;"><code>purchase_trade.configuration.active_coffee_compatibility</code>
</li>
<li style="margin:0.38rem 0;"><code>purchase.line.coffee_samples</code>
</li>
<li style="margin:0.38rem 0;"><code>sale.line.coffee_samples</code>
</li>
<li style="margin:0.38rem 0;">champs <code>coffee_*</code> sur <code>purchase.line</code> et <code>sale.line</code>
</li>
</ul>
</li>
<li style="margin:0.38rem 0;">Fichiers:
<ul style="margin:0.65rem 0 1rem 1.35rem; padding-left:1rem; list-style-type:circle;">
<li style="margin:0.38rem 0;"><code>modules/purchase_trade/coffee.py</code>
</li>
<li style="margin:0.38rem 0;"><code>modules/purchase_trade/coffee.xml</code>
</li>
<li style="margin:0.38rem 0;"><code>modules/purchase_trade/view/coffee_sample_*.xml</code>
</li>
<li style="margin:0.38rem 0;"><code>modules/purchase_trade/view/coffee_cupping_*.xml</code>
</li>
<li style="margin:0.38rem 0;"><code>modules/purchase_trade/view/purchase_line_form.xml</code>
</li>
<li style="margin:0.38rem 0;"><code>modules/purchase_trade/view/sale_line_form.xml</code>
</li>
</ul>
</li>
<li style="margin:0.38rem 0;">Points de vigilance:
<ul style="margin:0.65rem 0 1rem 1.35rem; padding-left:1rem; list-style-type:circle;">
<li style="margin:0.38rem 0;">l&#x27;expiration est pilotee par les domaines <code>Expired</code> et <code>Expiring soon</code>;
</li>
<li style="margin:0.38rem 0;">aucun blocage shipment/validation n&#x27;est introduit en phase 1;
</li>
<li style="margin:0.38rem 0;">la delegation labo reste une information de suivi, sans workflow labo complet;
</li>
<li style="margin:0.38rem 0;">les menus cafe sont inactifs par defaut et synchronises quand la configuration est sauvegardee.
</li>
</ul>
</li>
</ul>

## 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:

<ul style="margin:0.65rem 0 1rem 1.1rem; padding-left:1rem; list-style-type:disc;">
<li style="margin:0.38rem 0;">cycle de vie analyse: draft, sent, received, accepted, rejected, cancelled;
</li>
<li style="margin:0.38rem 0;">dates de demande, envoi, echeance et reception;
</li>
<li style="margin:0.38rem 0;">reference de rapport labo;
</li>
<li style="margin:0.38rem 0;">resultats physiques et organoleptiques: humidite, screen size, nombre de defauts, cup score;
</li>
<li style="margin:0.38rem 0;">controle de conformite par rapport aux seuils de la ligne purchase/sale.
</li>
</ul>

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:

<ul style="margin:0.65rem 0 1rem 1.1rem; padding-left:1rem; list-style-type:disc;">
<li style="margin:0.38rem 0;">les seuils qualite de la ligne cible;
</li>
<li style="margin:0.38rem 0;">la derniere analyse labo non annulee;
</li>
<li style="margin:0.38rem 0;">les resultats moyens de cupping;
</li>
<li style="margin:0.38rem 0;">les decisions de seance de cupping, dont <code>re-cup</code> et <code>rejected</code>.
</li>
</ul>

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.
