СВОД Обсудить проект
Все работы

04 / 04Интеграция учёта и касс

МойСклад ↔ кассы

Портал для розничной сети: товары и цены из нескольких учётных записей МойСклад попадают во все кассы, а чеки возвращаются в одно место для отчётов.

Сделали
Архитектуру, сервер, базу, API для касс
Масштаб
До 10 учётных записей, до 3 касс на точку
Стек
Python · PostgreSQL

сделали

заказчик под NDA
МойСкладдо 10 учётных записей
Порталочередь ≤ 3 запросов в секунду
Кассыдо 3 на точку продаж

Задача

У сети несколько учётных записей МойСклад. Кассы при этом должны продавать одни и те же товары по одним ценам, а владельцу нужны все чеки в одном месте.

МойСклад отвечает не чаще трёх раз в секунду, кассы иногда теряют связь — и ни один чек не должен ни пропасть, ни задвоиться.

Что сделали

  1. 01

    Изоляция по учётным записям

    Данные каждой учётной записи отделены в самой базе: ошибка в коде не покажет одной компании товары или чеки другой.

  2. 02

    Сначала МойСклад, потом портал

    Товар меняется в учёте, портал забирает изменения и раздаёт кассам. Источник правды один, расхождений нет.

  3. 03

    Очередь к МойСклад

    Запросы выстраиваются в очередь не быстрее трёх в секунду — лимит соблюдается при любом числе касс.

  4. 04

    Чеки без дублей

    Касса отправляет чеки пакетами и может повторить отправку после обрыва связи: повтор не создаёт второй чек.

  5. 05

    Три кассы на точку

    Предел держит сама база, а не только интерфейс: две одновременные регистрации не проскочат вместе.

Почему так

Правила — в базе

Изоляция, лимит касс и защита от дублей проверяются на уровне базы данных: их не обойти, даже если в приложении ошибка.

Повтор — это норма

Связь у касс рвётся, поэтому каждый запрос можно безопасно повторить. Это дешевле, чем разбирать пропавшие чеки.

Документы до кода

Прежде чем писать код, свели ТЗ, схему базы и API для касс и убрали расхождения между ними.

Похожая задача? Расскажите, что мешает работать, — ответим, как это собрать, сколько займёт и во сколько обойдётся.

Обсудить проект
Следующая работа СОБОР-1