""" Stream data model — exact mirror of create_stream() in process_utils.py. Every field name is preserved for JSON backward compatibility. """ from __future__ import annotations from typing import Any, Dict, List, Optional from pydantic import BaseModel, Field from enum import Enum class StreamType(str, Enum): product = "product" steam = "steam" air = "air" water = "water" class StreamProperties(BaseModel): """Legacy property labels (prop1..prop4).""" prop1: str = "Tin" prop2: str = "Tout" prop3: str = "ṁ" prop4: str = "cp" class StreamValues(BaseModel): """Legacy property values (val1..val4).""" val1: str = "" val2: str = "" val3: str = "" val4: str = "" class StreamModel(BaseModel): """ A single energy stream. Matches create_stream() output exactly. Both legacy fields (mdot, temp_in, temp_out, cp) and the new flexible stream_values dict are kept for backward compatibility. """ name: str = "" type: StreamType = StreamType.product properties: StreamProperties = Field(default_factory=StreamProperties) values: StreamValues = Field(default_factory=StreamValues) # New flexible key-value store for all variables stream_values: Dict[str, str] = Field(default_factory=dict) # Which variables the user chose to display display_vars: Optional[List[str]] = None # Legacy scalar fields mdot: str = "" temp_in: str = "" temp_out: str = "" cp: str = "" model_config = {"extra": "allow"}