Validation_Suite/validation-suite/backend/mercury/app/models/validation.py

49 lines
2.5 KiB
Python

from __future__ import annotations
import enum
from datetime import date
from sqlalchemy import Date, Enum, ForeignKey, JSON, String, Text
from sqlalchemy.orm import Mapped, mapped_column
from app.db.base import Base, TimestampMixin, UUIDMixin
class ValidationStatus(str, enum.Enum):
draft = "draft"
in_progress = "in_progress"
ready_for_report = "ready_for_report"
completed = "completed"
class Validation(Base, UUIDMixin, TimestampMixin):
__tablename__ = "validations"
report_number: Mapped[str] = mapped_column(String(80), unique=True, index=True)
customer_id: Mapped[str] = mapped_column(ForeignKey("customers.id"), index=True)
location_id: Mapped[str | None] = mapped_column(ForeignKey("locations.id"), index=True)
contact_id: Mapped[str | None] = mapped_column(ForeignKey("contacts.id"), index=True)
device_id: Mapped[str | None] = mapped_column(ForeignKey("devices.id"), index=True)
validation_type: Mapped[str] = mapped_column(String(120))
project: Mapped[str | None] = mapped_column(String(180))
test_location: Mapped[str | None] = mapped_column(String(180))
examiner_name: Mapped[str | None] = mapped_column(String(180))
participants: Mapped[str | None] = mapped_column(Text)
operator_name: Mapped[str | None] = mapped_column(String(180))
scheduled_on: Mapped[date | None] = mapped_column(Date)
performed_on: Mapped[date | None] = mapped_column(Date)
next_validation_on: Mapped[date | None] = mapped_column(Date)
examiner_id: Mapped[str | None] = mapped_column(ForeignKey("users.id"))
status: Mapped[ValidationStatus] = mapped_column(Enum(ValidationStatus), default=ValidationStatus.draft)
result: Mapped[str | None] = mapped_column(String(120))
notes: Mapped[str | None] = mapped_column(Text)
equipment_ids: Mapped[list[str]] = mapped_column(JSON, default=list)
environment_conditions: Mapped[dict] = mapped_column(JSON, default=dict)
documentation_checklist: Mapped[list[dict]] = mapped_column(JSON, default=list)
performance_checklist: Mapped[list[dict]] = mapped_column(JSON, default=list)
programs: Mapped[list[dict]] = mapped_column(JSON, default=list)
loading_patterns: Mapped[list[dict]] = mapped_column(JSON, default=list)
measurement_data: Mapped[list[dict]] = mapped_column(JSON, default=list)
drying: Mapped[dict] = mapped_column(JSON, default=dict)
recommendations: Mapped[list[dict]] = mapped_column(JSON, default=list)
attachments: Mapped[list[dict]] = mapped_column(JSON, default=list)