Сейчас метод send_aggregation в SDK реализован в упрощённом виде и не поддерживает структуру агрегации, описанную в официальной документации СУЗ API.
Текущая реализация:
def send_aggregation(
product_group: str,
sntins: list[str],
aggregation_type: str | None = None,
attributes: dict[str, Any] | None = None,
)
Формирует body:
{
"productGroup": "...",
"sntins": [...],
"aggregationType": "..."
}
Проблема
Официальная документация СУЗ API требует использовать структуру:
{
"productGroup": "...",
"aggregationUnits": [
{
"unitSerialNumber": "...",
"aggregationType": "AGGREGATION",
"aggregationUnitCapacity": 10,
"aggregatedItemsCount": 10,
"sntins": [...]
}
]
}
В текущем SDK:
- ❌ невозможно задать
unitSerialNumber (код агрегата / SSCC)
- ❌ невозможно указать
aggregationUnitCapacity
- ❌ невозможно построить вложенные структуры
- ❌ не соответствует документации СУЗ
Фактическое поведение
При попытке использовать агрегацию:
client.reports.send_aggregation(...)
возникают ошибки валидации API (например, отсутствие обязательных параметров или невозможность описать агрегат).
Ожидаемое поведение
Добавить поддержку полноценной агрегации через aggregationUnits.
Предлагаемое решение
Вариант 1 (рекомендуемый)
Расширить метод:
def send_aggregation(
self,
product_group: str,
aggregation_units: list[dict[str, Any]],
attributes: dict[str, Any] | None = None,
)
Формировать body:
body_dict = {
"productGroup": product_group,
"aggregationUnits": aggregation_units,
}
Вариант 2 (backward-compatible)
Поддержать оба варианта:
def send_aggregation(
self,
product_group: str,
sntins: list[str] | None = None,
aggregation_units: list[dict[str, Any]] | None = None,
...
)
Логика:
if aggregation_units:
body["aggregationUnits"] = aggregation_units
elif sntins:
body["sntins"] = sntins
Пример использования
client.reports.send_aggregation(
product_group="radio",
aggregation_units=[
{
"unitSerialNumber": "BOX_123456",
"aggregationType": "AGGREGATION",
"aggregationUnitCapacity": 5,
"aggregatedItemsCount": 5,
"sntins": codes,
}
],
)
Дополнительно
- сохранить текущую сигнатуру для обратной совместимости
- добавить типизацию для AggregationUnit (dataclass / pydantic)
Сейчас метод
send_aggregationв SDK реализован в упрощённом виде и не поддерживает структуру агрегации, описанную в официальной документации СУЗ API.Текущая реализация:
Формирует body:
{ "productGroup": "...", "sntins": [...], "aggregationType": "..." }Проблема
Официальная документация СУЗ API требует использовать структуру:
{ "productGroup": "...", "aggregationUnits": [ { "unitSerialNumber": "...", "aggregationType": "AGGREGATION", "aggregationUnitCapacity": 10, "aggregatedItemsCount": 10, "sntins": [...] } ] }В текущем SDK:
unitSerialNumber(код агрегата / SSCC)aggregationUnitCapacityФактическое поведение
При попытке использовать агрегацию:
возникают ошибки валидации API (например, отсутствие обязательных параметров или невозможность описать агрегат).
Ожидаемое поведение
Добавить поддержку полноценной агрегации через
aggregationUnits.Предлагаемое решение
Вариант 1 (рекомендуемый)
Расширить метод:
Формировать body:
Вариант 2 (backward-compatible)
Поддержать оба варианта:
Логика:
Пример использования
Дополнительно