Описание проекта
Конкретно интеграция должна автоматически и в обе стороны передавать заказы, счета, клиентов, товары и складские остатки. Новый заказ в магазине должен появляться в учётной системе как счёт или продажа с правильно привязанным клиентом; клиент, созданный или изменённый на любой стороне, должен сопоставляться, а не дублироваться; а когда остаток меняется из-за продажи, возврата или ручной корректировки, вторая система обязана это подхватить. Нам важно понятное сопоставление полей — чтобы мы сами решали, как поля магазина ложатся на поля бухгалтерии (налоги, артикулы, способы оплаты, валюты), и чтобы это сопоставление можно было просмотреть и поправить, а не получить «чёрный ящик».
Поскольку синхронизация двусторонняя, конфликты неизбежны, и то, как вы их разрешаете, для нас важнее чистой скорости. Если один и тот же клиент или товар изменён на обеих сторонах между запусками, нужны разумные правила, выбор источника истины по каждой сущности и журнал, где видно, что изменено, что пропущено и что вынесено на решение человека. Опишите, пожалуйста, как вы построите синхронизацию (регулярные запуски плюс близкий к реальному времени там, где это критично), как будете устранять дубли, как восстановитесь, если API бухгалтерии на минуту недоступен, и как дадите нам безопасно перезапустить упавшую пачку без задвоения.
— Сущности: заказы, счета, клиенты, товары, складские остатки
— Двусторонний обмен, источник истины и журнал конфликтов по каждой сущности
— Редактируемое сопоставление полей (налог, артикул, валюта, способ оплаты)
— Безопасные повторы и идемпотентные перезапуски без двойных счетов