Files
site/apps/api/migrations/versions/20260716_0013_zootech_lab_module.py
2026-07-17 12:57:18 +03:00

252 lines
13 KiB
Python

"""Revision ID: 20260716_0013
Revises: 20260716_0012
"""
from typing import Sequence, Union
import sqlalchemy as sa
from alembic import op
revision: str = "20260716_0013"
down_revision: Union[str, None] = "20260716_0012"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
op.create_table(
"zootech_lab_animal_profile",
sa.Column("enterprise_id", sa.String(length=36), nullable=False),
sa.Column("id", sa.String(length=36), nullable=False),
sa.Column("profile_key", sa.String(length=64), nullable=False),
sa.Column("label", sa.String(length=200), nullable=False),
sa.Column("ration_type", sa.String(length=10), nullable=False),
sa.Column("mass_kg", sa.Float(), nullable=True),
sa.Column("milk_yield_kg", sa.Float(), nullable=True),
sa.Column("external_no", sa.Integer(), nullable=True),
sa.Column("norms_method", sa.String(length=20), nullable=False, server_default="wesp"),
sa.Column("norms_params_json", sa.Text(), nullable=True),
sa.Column("version", sa.Integer(), nullable=False, server_default="1"),
sa.Column("created_by", sa.String(length=50), nullable=False, server_default="system"),
sa.Column("updated_by", sa.String(length=50), nullable=False, server_default="system"),
sa.Column("is_deleted", sa.Boolean(), nullable=False, server_default=sa.false()),
sa.Column("deleted_at", sa.DateTime(timezone=True), nullable=True),
sa.Column("deleted_by", sa.String(length=50), nullable=True),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("enterprise_id", "id", name="uq_zootech_lab_profile_ent_id"),
sa.UniqueConstraint("enterprise_id", "profile_key", name="uq_zootech_lab_profile_ent_key"),
)
op.create_index("idx_zootech_lab_animal_profile_enterprise", "zootech_lab_animal_profile", ["enterprise_id"])
op.create_index("idx_zootech_lab_animal_profile_ration_type", "zootech_lab_animal_profile", ["ration_type"])
op.create_table(
"zootech_lab_profile_norm",
sa.Column("enterprise_id", sa.String(length=36), nullable=False),
sa.Column("id", sa.String(length=36), nullable=False),
sa.Column("profile_id", sa.String(length=36), nullable=False),
sa.Column("indicator_key", sa.String(length=64), nullable=False),
sa.Column("min_value", sa.Float(), nullable=True),
sa.Column("max_value", sa.Float(), nullable=True),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint(
"enterprise_id",
"profile_id",
"indicator_key",
name="uq_zootech_lab_profile_norm",
),
)
op.create_index("idx_zootech_lab_profile_norm_enterprise", "zootech_lab_profile_norm", ["enterprise_id"])
op.create_index("idx_zootech_lab_profile_norm_profile", "zootech_lab_profile_norm", ["profile_id"])
op.create_table(
"zootech_lab_component_nutrient_value",
sa.Column("enterprise_id", sa.String(length=36), nullable=False),
sa.Column("id", sa.String(length=36), nullable=False),
sa.Column("component_id", sa.String(length=36), nullable=False),
sa.Column("nutrient_key", sa.String(length=80), nullable=False),
sa.Column("value", sa.Float(), nullable=True),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint(
"enterprise_id",
"component_id",
"nutrient_key",
name="uq_zootech_lab_comp_nutrient",
),
)
op.create_index(
"idx_zootech_lab_component_nutrient_enterprise",
"zootech_lab_component_nutrient_value",
["enterprise_id"],
)
op.create_index(
"idx_zootech_lab_component_nutrient_component",
"zootech_lab_component_nutrient_value",
["component_id"],
)
op.create_table(
"zootech_lab_recipe_ration",
sa.Column("enterprise_id", sa.String(length=36), nullable=False),
sa.Column("recipe_id", sa.String(length=36), nullable=False),
sa.Column("animal_profile_id", sa.String(length=36), nullable=True),
sa.Column("calc_engine", sa.String(length=20), nullable=True),
sa.Column("seed_source", sa.String(length=32), nullable=True),
sa.Column("calculated_at", sa.DateTime(timezone=True), nullable=True),
sa.Column("version", sa.Integer(), nullable=False, server_default="1"),
sa.Column("created_by", sa.String(length=50), nullable=False, server_default="system"),
sa.Column("updated_by", sa.String(length=50), nullable=False, server_default="system"),
sa.Column("is_deleted", sa.Boolean(), nullable=False, server_default=sa.false()),
sa.Column("deleted_at", sa.DateTime(timezone=True), nullable=True),
sa.Column("deleted_by", sa.String(length=50), nullable=True),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False),
sa.PrimaryKeyConstraint("enterprise_id", "recipe_id"),
)
op.create_index("idx_zootech_lab_recipe_ration_profile", "zootech_lab_recipe_ration", ["animal_profile_id"])
op.create_table(
"zootech_lab_ration_line",
sa.Column("enterprise_id", sa.String(length=36), nullable=False),
sa.Column("id", sa.String(length=36), nullable=False),
sa.Column("recipe_id", sa.String(length=36), nullable=False),
sa.Column("component_id", sa.String(length=36), nullable=True),
sa.Column("row_index", sa.Integer(), nullable=False, server_default="0"),
sa.Column("ingredient_name", sa.String(length=200), nullable=True),
sa.Column("daily_kg", sa.Float(), nullable=True),
sa.Column("in_ration", sa.Boolean(), nullable=False, server_default=sa.true()),
sa.Column("in_compound", sa.Boolean(), nullable=False, server_default=sa.false()),
sa.Column("version", sa.Integer(), nullable=False, server_default="1"),
sa.Column("created_by", sa.String(length=50), nullable=False, server_default="system"),
sa.Column("updated_by", sa.String(length=50), nullable=False, server_default="system"),
sa.Column("is_deleted", sa.Boolean(), nullable=False, server_default=sa.false()),
sa.Column("deleted_at", sa.DateTime(timezone=True), nullable=True),
sa.Column("deleted_by", sa.String(length=50), nullable=True),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("enterprise_id", "id", name="uq_zootech_lab_ration_line_ent_id"),
)
op.create_index("idx_zootech_lab_ration_line_enterprise", "zootech_lab_ration_line", ["enterprise_id"])
op.create_index("idx_zootech_lab_ration_line_recipe", "zootech_lab_ration_line", ["recipe_id"])
op.create_table(
"zootech_lab_ration_calc_total",
sa.Column("enterprise_id", sa.String(length=36), nullable=False),
sa.Column("id", sa.String(length=36), nullable=False),
sa.Column("recipe_id", sa.String(length=36), nullable=False),
sa.Column("scope", sa.String(length=16), nullable=False, server_default="ration"),
sa.Column("metric_key", sa.String(length=32), nullable=False),
sa.Column("label", sa.String(length=128), nullable=False, server_default=""),
sa.Column("value", sa.Float(), nullable=True),
sa.Column("sort_order", sa.Integer(), nullable=False, server_default="0"),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("enterprise_id", "id", name="uq_zootech_lab_calc_total_ent_id"),
)
op.create_index("idx_zootech_lab_calc_total_recipe", "zootech_lab_ration_calc_total", ["recipe_id"])
op.create_table(
"zootech_lab_ration_calc_indicator",
sa.Column("enterprise_id", sa.String(length=36), nullable=False),
sa.Column("id", sa.String(length=36), nullable=False),
sa.Column("recipe_id", sa.String(length=36), nullable=False),
sa.Column("scope", sa.String(length=16), nullable=False, server_default="ration"),
sa.Column("indicator_key", sa.String(length=64), nullable=True),
sa.Column("label", sa.String(length=128), nullable=False, server_default=""),
sa.Column("unit", sa.String(length=32), nullable=False, server_default=""),
sa.Column("min_value", sa.Float(), nullable=True),
sa.Column("max_value", sa.Float(), nullable=True),
sa.Column("content", sa.Float(), nullable=True),
sa.Column("diff", sa.Float(), nullable=True),
sa.Column("sort_order", sa.Integer(), nullable=False, server_default="0"),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("enterprise_id", "id", name="uq_zootech_lab_calc_ind_ent_id"),
)
op.create_index("idx_zootech_lab_calc_indicator_recipe", "zootech_lab_ration_calc_indicator", ["recipe_id"])
op.create_table(
"zootech_lab_ration_compound_line",
sa.Column("enterprise_id", sa.String(length=36), nullable=False),
sa.Column("id", sa.String(length=36), nullable=False),
sa.Column("recipe_id", sa.String(length=36), nullable=False),
sa.Column("row_index", sa.Integer(), nullable=False, server_default="0"),
sa.Column("ingredient_name", sa.String(length=200), nullable=True),
sa.Column("daily_kg", sa.Float(), nullable=True),
sa.Column("share_pct", sa.Float(), nullable=True),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("enterprise_id", "id", name="uq_zootech_lab_compound_line_ent_id"),
)
op.create_index("idx_zootech_lab_compound_line_recipe", "zootech_lab_ration_compound_line", ["recipe_id"])
op.create_table(
"zootech_lab_racion_normy_moskwa",
sa.Column("id", sa.String(length=36), nullable=False),
sa.Column("npitv", sa.Integer(), nullable=False),
sa.Column("pom", sa.Integer(), nullable=False, server_default="1"),
sa.Column("koef", sa.Float(), nullable=True),
sa.Column("popr_k_json", sa.Text(), nullable=True),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("npitv", "pom", name="uq_zootech_lab_racion_moskwa_npitv_pom"),
)
op.create_index("idx_zootech_lab_racion_moskwa_npitv", "zootech_lab_racion_normy_moskwa", ["npitv"])
op.create_table(
"zootech_lab_racion_normy_moskwa_meta",
sa.Column("id", sa.String(length=36), nullable=False),
sa.Column("meta_key", sa.String(length=32), nullable=False),
sa.Column("meta_json", sa.Text(), nullable=True),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("meta_key"),
)
op.create_table(
"zootech_lab_racion_normy_piter",
sa.Column("id", sa.String(length=36), nullable=False),
sa.Column("npitv", sa.Integer(), nullable=False),
sa.Column("konc", sa.Float(), nullable=False),
sa.Column("udoy", sa.Float(), nullable=False),
sa.Column("normy_json", sa.Text(), nullable=True),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("npitv", "konc", "udoy", name="uq_zootech_lab_racion_piter_npitv_konc_udoy"),
)
op.create_index("idx_zootech_lab_racion_piter_npitv", "zootech_lab_racion_normy_piter", ["npitv"])
op.create_table(
"zootech_lab_racion_normy_piter_meta",
sa.Column("id", sa.String(length=36), nullable=False),
sa.Column("meta_key", sa.String(length=32), nullable=False),
sa.Column("meta_json", sa.Text(), nullable=True),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("meta_key"),
)
op.create_table(
"zootech_lab_racion_normy_info",
sa.Column("id", sa.String(length=36), nullable=False),
sa.Column("nperem", sa.Integer(), nullable=False),
sa.Column("znachenie_json", sa.Text(), nullable=True),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("nperem"),
)
op.create_index("idx_zootech_lab_racion_info_nperem", "zootech_lab_racion_normy_info", ["nperem"])
def downgrade() -> None:
for table in (
"zootech_lab_racion_normy_info",
"zootech_lab_racion_normy_piter_meta",
"zootech_lab_racion_normy_piter",
"zootech_lab_racion_normy_moskwa_meta",
"zootech_lab_racion_normy_moskwa",
"zootech_lab_ration_compound_line",
"zootech_lab_ration_calc_indicator",
"zootech_lab_ration_calc_total",
"zootech_lab_ration_line",
"zootech_lab_recipe_ration",
"zootech_lab_component_nutrient_value",
"zootech_lab_profile_norm",
"zootech_lab_animal_profile",
):
op.drop_table(table)