"""Independent, feature-gated mobile stop snapshots; existing table SELECTs are unchanged.""" from datetime import datetime from sqlalchemy import Column, DateTime, Index, Integer, SmallInteger, String from app.core.database import Base class PlPlanStopProductMeta(Base): __tablename__ = 'pl_plan_stop_product_meta' __table_args__ = (Index('ix_pl_stop_meta_scope', 'tenant_no', 'plan_id', 'del_flag'), Index('ix_pl_stop_meta_row', 'tenant_no', 'stop_type', 'stop_product_id')) id = Column(String(64), primary_key=True) plan_id = Column(String(64), nullable=False, default='') stop_type = Column(String(16), nullable=False, default='') stop_id = Column(String(64), nullable=False, default='') stop_product_id = Column(String(64), nullable=False, default='') contract_id = Column(String(64), nullable=False, default='') contract_product_id = Column(String(64), nullable=False, default='') product_id = Column(String(64), nullable=False, default='') package_spec = Column(String(200), nullable=False, default='') model = Column(String(100), nullable=False, default='') unit = Column(String(20), nullable=False, default='') product_name = Column(String(200), nullable=False, default='') # No default: explicit None must persist as SQL NULL rather than an empty alias. alias_name = Column(String(200), nullable=True) brand_mode = Column(String(20), nullable=False, default='') brand_id = Column(String(64), nullable=False, default='') brand_name = Column(String(200), nullable=False, default='') source_product_name = Column(String(200), nullable=False, default='') source_brand_mode = Column(String(20), nullable=False, default='') source_brand_id = Column(String(64), nullable=False, default='') source_brand_name = Column(String(200), nullable=False, default='') tenant_no = Column(String(64), nullable=False) order_num = Column(Integer, nullable=True) remark = Column(String(512), nullable=True) create_by = Column(String(64), nullable=True) create_dept_id = Column(String(64), nullable=False, default='') create_time = Column(DateTime, nullable=False, default=datetime.now) update_by = Column(String(64), nullable=True) update_time = Column(DateTime, nullable=False, default=datetime.now, onupdate=datetime.now) del_flag = Column(SmallInteger, nullable=False, default=0)