from __future__ import annotations from datetime import date from pydantic import EmailStr, Field from app.models.customer import CustomerType from app.models.equipment import EquipmentKind, EquipmentStatus from app.models.validation import ValidationStatus from app.schemas.common import EntityRead, ORMModel class CustomerCreate(ORMModel): customer_type: CustomerType name: str street: str | None = None postal_code: str | None = None city: str | None = None phone: str | None = None email: EmailStr | None = None hygiene_officer: str | None = None quality_manager: str | None = None notes: str | None = None class CustomerRead(CustomerCreate, EntityRead): pass class CustomerUpdate(CustomerCreate): pass class LocationCreate(ORMModel): customer_id: str name: str street: str | None = None postal_code: str | None = None city: str | None = None room: str | None = None class LocationRead(LocationCreate, EntityRead): pass class LocationUpdate(LocationCreate): pass class ContactCreate(ORMModel): customer_id: str full_name: str function: str | None = None email: EmailStr | None = None phone: str | None = None class ContactRead(ContactCreate, EntityRead): pass class ContactUpdate(ContactCreate): pass class DeviceCreate(ORMModel): customer_id: str location_id: str | None = None manufacturer: str model: str device_type: str | None = None serial_number: str year_built: int | None = None commissioned_on: date | None = None chamber_volume_liters: int | None = None steam_generation: str | None = None water_treatment: str | None = None documentation: str | None = None supplier: str | None = None class DeviceRead(DeviceCreate, EntityRead): pass class DeviceUpdate(DeviceCreate): pass class EquipmentCreate(ORMModel): kind: EquipmentKind manufacturer: str | None = None model: str | None = None serial_number: str calibrated_on: date | None = None calibration_due_on: date | None = None certificate_document_id: str | None = None status: EquipmentStatus = EquipmentStatus.green class EquipmentRead(EquipmentCreate, EntityRead): pass class EquipmentUpdate(EquipmentCreate): pass class ValidationCreate(ORMModel): report_number: str customer_id: str location_id: str | None = None contact_id: str | None = None device_id: str | None = None validation_type: str project: str | None = None test_location: str | None = None examiner_name: str | None = None participants: str | None = None operator_name: str | None = None scheduled_on: date | None = None performed_on: date | None = None next_validation_on: date | None = None examiner_id: str | None = None status: ValidationStatus = ValidationStatus.draft result: str | None = None notes: str | None = None equipment_ids: list[str] = Field(default_factory=list) environment_conditions: dict = Field(default_factory=dict) documentation_checklist: list[dict] = Field(default_factory=list) performance_checklist: list[dict] = Field(default_factory=list) programs: list[dict] = Field(default_factory=list) loading_patterns: list[dict] = Field(default_factory=list) measurement_data: list[dict] = Field(default_factory=list) drying: dict = Field(default_factory=dict) recommendations: list[dict] = Field(default_factory=list) attachments: list[dict] = Field(default_factory=list) class ValidationRead(ValidationCreate, EntityRead): pass class ValidationUpdate(ValidationCreate): pass