AI-система простежуваності продуктів харчування
Простежуваність - ключова вимога харчової безпеки: при виявленні проблеми необхідно за хвилини локалізувати всі порушені партії. AI автоматизує збір даних ланцюжка та робить відгук точковим, а не масовим.
Архітектура простежуваності
One-up/One-down принцип:
Кожен учасник ланцюга знає, від кого отримав та кому віддав продукт. AI пов'язує всі ланки у граф:
from datetime import datetime
import json
import hashlib
class TraceabilityRecord:
"""Запись прослеживаемости для партии продукта"""
def __init__(self, lot_id, product_code, quantity_kg, timestamp=None):
self.lot_id = lot_id
self.product_code = product_code
self.quantity_kg = quantity_kg
self.timestamp = timestamp or datetime.now().isoformat()
self.inputs = [] # из каких партий сделан (сырьё)
self.processing_params = {} # производственные параметры
self.outputs = [] # в какие партии ушёл (полуфабрикат, готовая)
self.shipments = [] # кому отгружен
def add_input_lot(self, input_lot_id, quantity_used, quality_params=None):
"""Добавить входящую партию сырья"""
self.inputs.append({
'lot_id': input_lot_id,
'quantity_kg': quantity_used,
'quality': quality_params or {},
'timestamp': datetime.now().isoformat()
})
def record_processing(self, params):
"""Записать производственные параметры"""
self.processing_params = {
**params,
'recorded_at': datetime.now().isoformat()
}
def add_shipment(self, destination_id, quantity, transport_conditions=None):
"""Записать отгрузку"""
self.shipments.append({
'destination': destination_id,
'quantity_kg': quantity,
'transport': transport_conditions or {},
'timestamp': datetime.now().isoformat()
})
def generate_lot_hash(self):
"""Хэш записи для верификации целостности"""
data = json.dumps({
'lot_id': self.lot_id,
'inputs': self.inputs,
'processing': self.processing_params
}, sort_keys=True)
return hashlib.sha256(data.encode()).hexdigest()
class TraceabilityGraph:
"""Граф прослеживаемости для анализа и отзывов"""
def __init__(self):
import networkx as nx
self.graph = nx.DiGraph()
def add_lot(self, lot: TraceabilityRecord):
self.graph.add_node(lot.lot_id, data=lot.__dict__)
for inp in lot.inputs:
self.graph.add_edge(inp['lot_id'], lot.lot_id, quantity=inp['quantity_kg'])
for shipment in lot.shipments:
self.graph.add_edge(lot.lot_id, shipment['destination'], quantity=shipment['quantity_kg'])
def recall_simulation(self, problem_lot_id):
"""Выявить все партии, затронутые отзывом"""
import networkx as nx
# Все потомки (вниз по цепи): куда ушёл проблемный продукт
downstream = nx.descendants(self.graph, problem_lot_id)
# Все предки (вверх по цепи): из какого сырья сделан
upstream = nx.ancestors(self.graph, problem_lot_id)
return {
'problem_lot': problem_lot_id,
'downstream_lots': list(downstream),
'upstream_lots': list(upstream),
'total_kg_at_risk': sum(
self.graph.nodes[lot]['data']['quantity_kg']
for lot in downstream
if lot in self.graph.nodes
)
}
Інтеграція з ЧЕСНИЙ ЗНАК
Маркування харчової продукції:
- Молоко та молочні продукти: з 1.06.2021 (Постанова 1550) - Вода упакована: з 2022 - Бізес: реєстрація у ГІС МТ, друк кодів DataMatrix
AI-автоматизація роботи з маркуванням: - генерація заявки на коди → прийом кодів → нанесення на упаковку - автоматичне підтвердження введення в оборот при відвантаженні - Reconciliation: коди в системі vs. фізична наявність → виявлення розбіжностей
Аналітика та запобігання проблемам
Predictive quality control:
ML-модель на виробничих даних + історія відгуків: - Параметри процесу, що виходять за допуск → який % цих партій історично призводив до скарг? - Проактивний карантин: партія проходить посилений контроль до випуску - Економіка: 1 превентивний карантин > 1 відгук з ринку (у 10-50 разів дешевше)
Моніторинг холодового ланцюга:
IoT-логери в транспорті та холодильниках: - Порушення температурного режиму → автоматичне оновлення терміну придатності - ML-розрахунок Mean Kinetic Temperature (MKT) з історії температур - Перерахунок залишкового терміну придатності партії
Термін розробки: 4–6 місяців для системи простежуваності з інтеграцією ЧЕСНИЙ ЗНАК, графом простежуваності та моніторингом cold chain.







