Skip to content

Payments Linking (payments-linking)

UUID приложения: 0ac9704b-5dc3-4001-a317-fcda7ab03dbc
Название: payments-linking

Назначение

Автоматическая привязка платёжных документов (paymentin, paymentout, cashin, cashout) к хозяйственным операциям (заказы, накладные, счета) по правилам, настраиваемым пользователем.

Типы правил

  1. Поиск по номерам — ищет номера документов в тексте назначения платежа или входящем номере.
  2. Поиск по маске — маска вида НОМЕР ДАТА или ДАТА НОМЕР для извлечения номера/даты из назначения.
  3. По контрагенту — для заданного контрагента связывает платёж с документами указанных типов и статусов.
  4. Счёт = Проект — связывает расчётный счёт и проект по контрагенту.

Модели БД

  • pl_data — общие настройки приложения (переключатели приоритета полей).
  • pl_rule — правила привязки (тип, вид платежа, тип документа, период, маска, статусы).
  • pl_ap_rule — правила «счёт + проект» по контрагенту.

Поток webhook

  • POST /<uid>/webhook-processor — принимает любые webhook, ставит задачу save_webhook в Celery (retry до 3 раз, interval 0.2 сек).
  • POST /<uid>/internal-webhook — для каждого события создаёт PaymentsLinking(event=..., account_uid=...) и вызывает init().run().

Бизнес-логика

Сервис src/services/payments_linking.py: - Получает платёжный документ по meta.href из события. - Определяет направление (входящий/исходящий). - Последовательно применяет правила (приоритет: номера → маска → контрагент → счёт=проект). - Находит связанные документы через Moysklad API. - Обновляет платёжный документ (связи + проект, если включено).

GUI (NiceGUI)

Страница: src/endpoints/main/payments_linking.py
4 вкладки — по одной на каждый тип правил. Позволяют создавать, редактировать и удалять правила, а также задавать приоритет полей (входящий номер / назначение платежа).

Observability: событие pl_config_saved

При каждом сохранении конфигурации платёжных правил сервис эмитит через logfire.info событие pl_config_saved (см. src/services/payments_linking.py). Точки эмиссии соответствуют операциям: включение правил, настройка приоритетов полей, переключение/правка/удаление/создание правила, создание AP-правила.

  • account_uid — идентификатор аккаунта МойСклад.
  • action — тип операции (например rules_switch, settings:<field>, switch:<rule_type>, rule_updated, rule_deleted, rule_created, ap_rule_created) + специфичные поля операции (enabled, value, rule_id, rule_type).
  • config — полный снимок актуального конфига после операции (настройки + правила
  • AP-правила), полученный через _load_config_snapshot в той же транзакции после commit. По снимку можно восстановить состояние конфига из логов.

Логирование трассировки приложения настроено в src/gui.py, src/backend.py.