from sqlalchemy import Column, Integer, String, DateTime, Text, Boolean, ForeignKey, JSON from sqlalchemy.sql import func from app.core.database import Base class Regulation(Base): __tablename__ = "regulations" id = Column(Integer, primary_key=True, autoincrement=True) title = Column(String(200), nullable=False) category = Column(String(50)) # safety, operation, quality, environment content = Column(Text) effective_date = Column(DateTime(timezone=True)) status = Column(String(20), default="active") # active, archived, draft attachment_url = Column(String(500)) created_by = Column(Integer, ForeignKey("users.id")) created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) class Standard(Base): __tablename__ = "standards" id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String(200), nullable=False) code = Column(String(100)) # e.g. ISO 50001, GB/T 23331 type = Column(String(50)) # national, industry, enterprise description = Column(Text) compliance_status = Column(String(20), default="pending") # compliant, non_compliant, pending, in_progress review_date = Column(DateTime(timezone=True)) created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) class ProcessDoc(Base): __tablename__ = "process_docs" id = Column(Integer, primary_key=True, autoincrement=True) title = Column(String(200), nullable=False) category = Column(String(50)) # operation, maintenance, emergency, training content = Column(Text) version = Column(String(20), default="1.0") approved_by = Column(String(100)) effective_date = Column(DateTime(timezone=True)) created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) class EmergencyPlan(Base): __tablename__ = "emergency_plans" id = Column(Integer, primary_key=True, autoincrement=True) title = Column(String(200), nullable=False) scenario = Column(String(100)) # fire, power_outage, equipment_failure, chemical_leak steps = Column(JSON) # [{step_number, action, responsible_person, contact}] responsible_person = Column(String(100)) review_date = Column(DateTime(timezone=True)) is_active = Column(Boolean, default=True) created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now())