# Story 10.1: Nouveaux Types Physiques pour Conditions aux Limites

**Epic:** 10 - Enhanced Boundary Conditions  
**Priorité:** P0-CRITIQUE  
**Estimation:** 2h  
**Statut:** backlog  
**Dépendances:** Aucune

---

## Story

> En tant que développeur de la librairie Entropyk,  
> Je veux ajouter les types physiques `Concentration`, `VolumeFlow`, `RelativeHumidity` et `VaporQuality`,  
> Afin de pouvoir exprimer correctement les propriétés spécifiques des différents fluides.

---

## Contexte

Les conditions aux limites typées nécessitent de nouveaux types physiques pour représenter:

1. **Concentration** - Pour les mélanges eau-glycol (PEG, MEG)
2. **VolumeFlow** - Pour les débits volumiques des caloporteurs
3. **RelativeHumidity** - Pour les propriétés de l'air humide
4. **VaporQuality** - Pour le titre des réfrigérants

---

## Spécifications Techniques

### 1. Concentration

```rust
/// Concentration massique en % (0-100)
/// Utilisé pour les mélanges eau-glycol (PEG, MEG)
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
pub struct Concentration(pub f64);

impl Concentration {
    /// Crée une concentration depuis un pourcentage (0-100)
    pub fn from_percent(value: f64) -> Self;
    
    /// Retourne la concentration en pourcentage
    pub fn to_percent(&self) -> f64;
    
    /// Retourne la fraction massique (0-1)
    pub fn to_mass_fraction(&self) -> f64;
}
```

### 2. VolumeFlow

```rust
/// Débit volumique en m³/s
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
pub struct VolumeFlow(pub f64);

impl VolumeFlow {
    pub fn from_m3_per_s(value: f64) -> Self;
    pub fn from_l_per_min(value: f64) -> Self;
    pub fn from_l_per_s(value: f64) -> Self;
    pub fn to_m3_per_s(&self) -> f64;
    pub fn to_l_per_min(&self) -> f64;
    pub fn to_l_per_s(&self) -> f64;
}
```

### 3. RelativeHumidity

```rust
/// Humidité relative en % (0-100)
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
pub struct RelativeHumidity(pub f64);

impl RelativeHumidity {
    pub fn from_percent(value: f64) -> Self;
    pub fn to_percent(&self) -> f64;
    pub fn to_fraction(&self) -> f64;
}
```

### 4. VaporQuality

```rust
/// Titre (vapor quality) pour fluides frigorigènes (0-1)
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
pub struct VaporQuality(pub f64);

impl VaporQuality {
    pub fn from_fraction(value: f64) -> Self;
    pub fn to_fraction(&self) -> f64;
    pub fn to_percent(&self) -> f64;
    
    /// Retourne true si le fluide est en phase liquide saturé
    pub fn is_saturated_liquid(&self) -> bool;
    
    /// Retourne true si le fluide est en phase vapeur saturée
    pub fn is_saturated_vapor(&self) -> bool;
}
```

---

## Fichiers à Modifier

| Fichier | Action |
|---------|--------|
| `crates/core/src/types.rs` | Ajouter les 4 nouveaux types avec implémentation complète |
| `crates/core/src/lib.rs` | Re-exporter les nouveaux types |

---

## Critères d'Acceptation

- [ ] `Concentration` implémenté avec validation (0-100%)
- [ ] `VolumeFlow` implémenté avec conversions d'unités
- [ ] `RelativeHumidity` implémenté avec validation (0-100%)
- [ ] `VaporQuality` implémenté avec validation (0-1)
- [ ] Tous les types implémentent `Display`, `Add`, `Sub`, `Mul<f64>`, `Div<f64>`
- [ ] Tests unitaires pour chaque type
- [ ] Documentation complète avec exemples

---

## Tests Requis

```rust
#[cfg(test)]
mod tests {
    // Concentration
    #[test]
    fn test_concentration_from_percent() { /* ... */ }
    #[test]
    fn test_concentration_mass_fraction() { /* ... */ }
    #[test]
    #[should_panic]
    fn test_concentration_invalid_negative() { /* ... */ }
    
    // VolumeFlow
    #[test]
    fn test_volume_flow_conversions() { /* ... */ }
    
    // RelativeHumidity
    #[test]
    fn test_relative_humidity_from_percent() { /* ... */ }
    #[test]
    fn test_relative_humidity_fraction() { /* ... */ }
    
    // VaporQuality
    #[test]
    fn test_vapor_quality_from_fraction() { /* ... */ }
    #[test]
    fn test_vapor_quality_saturated_states() { /* ... */ }
}
```

---

## Références

- [Architecture Document](../../plans/boundary-condition-refactoring-architecture.md)
- [Epic 10](../planning-artifacts/epic-10-enhanced-boundary-conditions.md)
