"""业务岗位角色模型。 与系统登录角色(`roles`,权限维度)严格区分:本表是**业务岗位**维度, 决定人员适用的计提公式模板与参数。需求 #28 要求岗位角色可增删、 新增岗位时在系统设置中绑定公式与参数(无需改代码),故模板编码 存于本表、公式实现留在代码内注册表(一期不引入规则引擎)。 """ from sqlalchemy import Integer, String from sqlalchemy.orm import Mapped, mapped_column from app.models.base import BIGINT_UNSIGNED, TINYINT_TYPE, Base, TimestampMixin, mysql_table_args class BusinessRole(Base, TimestampMixin): """业务岗位角色表。内置三个岗位(营销员/营销经理/信息员)随迁移初始化。""" __tablename__ = "business_roles" __table_args__ = mysql_table_args("业务岗位角色表(与登录角色roles区分,决定计提公式与参数)") id: Mapped[int] = mapped_column( BIGINT_UNSIGNED, primary_key=True, autoincrement=True, comment="主键ID" ) role_code: Mapped[str] = mapped_column( String(32), nullable=False, unique=True, comment="岗位编码:salesperson营销员 sales_manager营销经理 info_officer信息员,创建后不可修改", ) role_name: Mapped[str] = mapped_column(String(64), nullable=False, comment="岗位名称") calc_template: Mapped[str] = mapped_column( String(32), nullable=False, comment="计提公式模板编码(以代码内模板注册表为准)" ) description: Mapped[str | None] = mapped_column(String(255), comment="岗位说明") sort_order: Mapped[int] = mapped_column( Integer, nullable=False, server_default="0", comment="显示排序" ) status: Mapped[int] = mapped_column( TINYINT_TYPE, nullable=False, server_default="1", comment="状态:1启用 0禁用" ) is_builtin: Mapped[int] = mapped_column( TINYINT_TYPE, nullable=False, server_default="0", comment="是否内置岗位:1内置(禁删禁停) 0自定义", )