60 lines
1.5 KiB
Python
60 lines
1.5 KiB
Python
from datetime import date, datetime
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
|
|
class MachineEventIn(BaseModel):
|
|
model_config = ConfigDict(extra="allow")
|
|
|
|
machine_id: str
|
|
event_type: str
|
|
timestamp: datetime
|
|
cycle_time_sec: float | None = None
|
|
source: str | None = "digital_input"
|
|
input_name: str | None = None
|
|
input_value: bool | int | str | None = None
|
|
|
|
|
|
class ProductionOrderCreate(BaseModel):
|
|
order_number: str
|
|
machine_id: int
|
|
article_ref: str
|
|
article_name: str
|
|
mold_ref: str | None = None
|
|
material_ref: str | None = None
|
|
planned_qty: int = Field(gt=0)
|
|
cavities: int = Field(default=1, gt=0)
|
|
theoretical_cycle_time_sec: float = Field(gt=0)
|
|
|
|
|
|
class DowntimeQualify(BaseModel):
|
|
reason_code: str
|
|
comment: str | None = None
|
|
qualified_by: str
|
|
|
|
|
|
class ScrapCreate(BaseModel):
|
|
machine_id: str
|
|
production_order_id: int | None = None
|
|
quantity: int = Field(gt=0)
|
|
reason_code: str
|
|
comment: str | None = None
|
|
operator_name: str
|
|
timestamp: datetime | None = None
|
|
|
|
|
|
class DailyOeeQuery(BaseModel):
|
|
date: date
|
|
|
|
|
|
class MachineConfigUpdate(BaseModel):
|
|
name: str | None = None
|
|
brand: str | None = None
|
|
model: str | None = None
|
|
is_active: bool | None = None
|
|
cycle_signal_edge: str | None = None
|
|
debounce_ms: int | None = Field(default=None, ge=0)
|
|
min_cycle_time_sec: int | None = Field(default=None, ge=1)
|
|
max_cycle_time_sec: int | None = Field(default=None, ge=1)
|
|
stop_detection_delay_sec: int | None = Field(default=None, ge=1)
|