Интегрирован wesp в сайт
CI / quality (push) Canceled after 0s

This commit is contained in:
влад
2026-07-17 12:57:18 +03:00
parent 5dfa06ddbe
commit 355c0ef9f1
883 changed files with 194576 additions and 177 deletions
+17
View File
@@ -0,0 +1,17 @@
from .animal_profile import LabAnimalProfile # noqa: F401
from .component_nutrient_value import LabComponentNutrientValue # noqa: F401
from .profile_norm import LabProfileNorm # noqa: F401
from .racion_normy import ( # noqa: F401
LabRacionNormyInfo,
LabRacionNormyMoskwa,
LabRacionNormyMoskwaMeta,
LabRacionNormyPiter,
LabRacionNormyPiterMeta,
)
from .ration_calc import ( # noqa: F401
LabRationCalcIndicator,
LabRationCalcTotal,
LabRationCompoundLine,
)
from .ration_line import LabRationLine # noqa: F401
from .recipe_ration import LabRecipeRation # noqa: F401
+11
View File
@@ -0,0 +1,11 @@
from sqlalchemy import Column, Integer, String
class LabAuditMixin:
version = Column(Integer, default=1, nullable=False)
created_by = Column(String(50), nullable=False, default="system")
updated_by = Column(String(50), nullable=False, default="system")
# Backward alias during migration cleanup
LabSyncMixin = LabAuditMixin
+20
View File
@@ -0,0 +1,20 @@
from sqlalchemy import Column, Float, Integer, String, Text
from app import db
from app.models.base import SoftDeleteMixin, TimestampMixin, default_uuid
from ._mixins import LabAuditMixin
class LabAnimalProfile(db.Model, TimestampMixin, SoftDeleteMixin, LabAuditMixin):
__tablename__ = "lab_animal_profile"
id = Column(String(36), primary_key=True, default=default_uuid)
profile_key = Column(String(64), nullable=False, unique=True, index=True)
label = Column(String(200), nullable=False)
ration_type = Column(String(10), nullable=False, index=True)
mass_kg = Column(Float, nullable=True)
milk_yield_kg = Column(Float, nullable=True)
external_no = Column(Integer, nullable=True)
norms_method = Column(String(20), nullable=False, default="wesp", server_default="wesp")
norms_params_json = Column(Text, nullable=True)
@@ -0,0 +1,17 @@
from sqlalchemy import Column, Float, ForeignKey, String, UniqueConstraint
from app import db
class LabComponentNutrientValue(db.Model):
"""Полная матрица показателей zootech «База сырья» (EAV, server-only)."""
__tablename__ = "lab_component_nutrient_value"
__table_args__ = (
UniqueConstraint("component_id", "nutrient_key", name="uq_lab_comp_nutrient"),
)
id = Column(String(36), primary_key=True)
component_id = Column(String(36), ForeignKey("component.id"), nullable=False, index=True)
nutrient_key = Column(String(80), nullable=False, index=True)
value = Column(Float, nullable=True)
+24
View File
@@ -0,0 +1,24 @@
from sqlalchemy import Column, Float, ForeignKey, String, UniqueConstraint
from app import db
from app.models.base import default_uuid
class LabProfileNorm(db.Model):
"""Min/max нормы показателя для профиля стада (server-only)."""
__tablename__ = "lab_profile_norm"
__table_args__ = (
UniqueConstraint("profile_id", "indicator_key", name="uq_lab_profile_norm"),
)
id = Column(String(36), primary_key=True, default=default_uuid)
profile_id = Column(
String(36),
ForeignKey("lab_animal_profile.id"),
nullable=False,
index=True,
)
indicator_key = Column(String(64), nullable=False)
min_value = Column(Float, nullable=True)
max_value = Column(Float, nullable=True)
+56
View File
@@ -0,0 +1,56 @@
"""Справочники норм RACION (NORMY_*)."""
from __future__ import annotations
from sqlalchemy import Column, Float, Integer, String, Text, UniqueConstraint
from app import db
from app.models.base import default_uuid
class LabRacionNormyMoskwa(db.Model):
__tablename__ = "lab_racion_normy_moskwa"
__table_args__ = (UniqueConstraint("npitv", "pom", name="uq_lab_racion_moskwa_npitv_pom"),)
id = Column(String(36), primary_key=True, default=default_uuid)
npitv = Column(Integer, nullable=False, index=True)
pom = Column(Integer, nullable=False, default=1)
koef = Column(Float, nullable=True)
popr_k_json = Column(Text, nullable=True)
class LabRacionNormyMoskwaMeta(db.Model):
__tablename__ = "lab_racion_normy_moskwa_meta"
id = Column(String(36), primary_key=True, default=default_uuid)
meta_key = Column(String(32), nullable=False, unique=True)
meta_json = Column(Text, nullable=True)
class LabRacionNormyPiter(db.Model):
__tablename__ = "lab_racion_normy_piter"
__table_args__ = (
UniqueConstraint("npitv", "konc", "udoy", name="uq_lab_racion_piter_npitv_konc_udoy"),
)
id = Column(String(36), primary_key=True, default=default_uuid)
npitv = Column(Integer, nullable=False, index=True)
konc = Column(Float, nullable=False)
udoy = Column(Float, nullable=False)
normy_json = Column(Text, nullable=True)
class LabRacionNormyPiterMeta(db.Model):
__tablename__ = "lab_racion_normy_piter_meta"
id = Column(String(36), primary_key=True, default=default_uuid)
meta_key = Column(String(32), nullable=False, unique=True)
meta_json = Column(Text, nullable=True)
class LabRacionNormyInfo(db.Model):
__tablename__ = "lab_racion_normy_info"
id = Column(String(36), primary_key=True, default=default_uuid)
nperem = Column(Integer, nullable=False, unique=True, index=True)
znachenie_json = Column(Text, nullable=True)
+58
View File
@@ -0,0 +1,58 @@
from sqlalchemy import Column, Float, ForeignKey, Integer, String
from app import db
from app.models.base import default_uuid
class LabRationCalcTotal(db.Model):
__tablename__ = "lab_ration_calc_total"
id = Column(String(36), primary_key=True, default=default_uuid)
recipe_id = Column(
String(36),
ForeignKey("lab_recipe_ration.recipe_id"),
nullable=False,
index=True,
)
scope = Column(String(16), nullable=False, default="ration")
metric_key = Column(String(32), nullable=False)
label = Column(String(128), nullable=False, default="")
value = Column(Float, nullable=True)
sort_order = Column(Integer, nullable=False, default=0)
class LabRationCalcIndicator(db.Model):
__tablename__ = "lab_ration_calc_indicator"
id = Column(String(36), primary_key=True, default=default_uuid)
recipe_id = Column(
String(36),
ForeignKey("lab_recipe_ration.recipe_id"),
nullable=False,
index=True,
)
scope = Column(String(16), nullable=False, default="ration")
indicator_key = Column(String(64), nullable=True)
label = Column(String(128), nullable=False, default="")
unit = Column(String(32), nullable=False, default="")
min_value = Column(Float, nullable=True)
max_value = Column(Float, nullable=True)
content = Column(Float, nullable=True)
diff = Column(Float, nullable=True)
sort_order = Column(Integer, nullable=False, default=0)
class LabRationCompoundLine(db.Model):
__tablename__ = "lab_ration_compound_line"
id = Column(String(36), primary_key=True, default=default_uuid)
recipe_id = Column(
String(36),
ForeignKey("lab_recipe_ration.recipe_id"),
nullable=False,
index=True,
)
row_index = Column(Integer, nullable=False, default=0)
ingredient_name = Column(String(200), nullable=True)
daily_kg = Column(Float, nullable=True)
share_pct = Column(Float, nullable=True)
+21
View File
@@ -0,0 +1,21 @@
from sqlalchemy import Boolean, Column, Float, ForeignKey, Integer, String
from app import db
from app.models.base import SoftDeleteMixin, TimestampMixin, default_uuid
from ._mixins import LabAuditMixin
class LabRationLine(db.Model, TimestampMixin, SoftDeleteMixin, LabAuditMixin):
__tablename__ = "lab_ration_line"
id = Column(String(36), primary_key=True, default=default_uuid)
recipe_id = Column(String(36), ForeignKey("recipe.id"), nullable=False, index=True)
component_id = Column(
String(36), ForeignKey("component.id"), nullable=True, index=True
)
row_index = Column(Integer, nullable=False, default=0)
ingredient_name = Column(String(200), nullable=True)
daily_kg = Column(Float, nullable=True)
in_ration = Column(Boolean, nullable=False, default=True)
in_compound = Column(Boolean, nullable=False, default=False)
+18
View File
@@ -0,0 +1,18 @@
from sqlalchemy import Column, DateTime, ForeignKey, String
from app import db
from app.models.base import SoftDeleteMixin, TimestampMixin
from ._mixins import LabAuditMixin
class LabRecipeRation(db.Model, TimestampMixin, SoftDeleteMixin, LabAuditMixin):
__tablename__ = "lab_recipe_ration"
recipe_id = Column(String(36), ForeignKey("recipe.id"), primary_key=True)
animal_profile_id = Column(
String(36), ForeignKey("lab_animal_profile.id"), nullable=True, index=True
)
calc_engine = Column(String(20), nullable=True)
seed_source = Column(String(32), nullable=True)
calculated_at = Column(DateTime, nullable=True)