29 lines
1.0 KiB
Python
29 lines
1.0 KiB
Python
"""Канонические indicator_key для нутриентов компонента (без fuzzy-match)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from app.modules.zootech.lab.norm_catalog import NORM_HEADER_TO_KEY
|
|
|
|
|
|
def augment_with_indicator_keys(data: dict[str, Any] | None) -> dict[str, float]:
|
|
"""Дублирует значения под slug indicator_key."""
|
|
if not data:
|
|
return {}
|
|
out: dict[str, float] = {}
|
|
for raw_key, raw_val in data.items():
|
|
try:
|
|
out[str(raw_key)] = float(raw_val)
|
|
except (TypeError, ValueError):
|
|
continue
|
|
for header, indicator_key in NORM_HEADER_TO_KEY.items():
|
|
if header in out and indicator_key not in out:
|
|
out[indicator_key] = out[header]
|
|
return out
|
|
|
|
|
|
def canonicalize_for_storage(data: dict[str, Any] | None) -> dict[str, float]:
|
|
"""При записи в EAV: slug indicator_key + исходный заголовок."""
|
|
return augment_with_indicator_keys(data)
|