Алгоритм разноски

 

Разноска платежей работает по такому алгоритму:

Процедура import_payments.process_file перебирает все строки (из таблицы payment_file_lines) по file_id указанного файла. Для каждой строки вызывается import_payments.process_file_line.

Процедуры import_payments.process_file и import_payments.process_file_line могут быть вызваны из приложения plPos (там это называется "принудительная обработка").

Т.е. на самом верхнем уровне логики разноски платежей над каждой строкой из payment_file_lines работает процедура import_payments.process_file_line.

 

Эта процедура работает следующим образом:

Смотрится payment_files.payment_code, по этому коду определяется какой процедурой разносить платежи.

payment_code - это код из справочника "Коды платёжных систем" (из таблицы payment_codes).

Важно, чтобы поле payment_codes.p_method содержало либо DEFAULT, либо имя другой процедуры, если дефолтовая не подходит.

 

Дефолтовая работает так:

Из payment_file_lines берутся поля: payment_file_lines.INN и payment_file_lines.RS. По ним определяется клиент (client_id).

По клиенту смотрится его тип (физическое/юридическое лицо).

Для юридических лиц:

- определяется балансовый счёт документа (далее - БСД) - account_id. Если у клиента БСД ещё нет, то БСД будет создан. Если у клиента несколько БСД, то на этом разноска строки файла прекращается, у файла прописывается соответствующий флаг, дальнейшая разноска этой строки предлагается пользователю;

 - ищется подходящий счёт (по клиенту, БСД, дате и сумме). Если счетов несколько, или подходящих нет - то разноска для данной строки прекращается;

 - происходит оплата на счёт вызовом процедуры reg_payment (при этом будет создан платёж и сразу связан со счётом);

 - reg_payment сохраняет payment_doc_id (здесь: plx_params.l_last_payment_doc_id), этот payment_doc_id прописывается в payment_file_lines для текущей строки и строка считается успешно разнесённой.

Для физических лиц:

 - разноска прекращается и предлагатся всё сделать пользователю.

 

Если дефолтовая не подходит, можно написать свою на PL/SQL, у неё должен быть такой формат:

procedure XXXXX(
            rowid_ in varchar,
            payment_code_ in varchar2,
            client_id_ in out integer,
            account_id_ in out integer,
            payment_doc_id_ in out integer,
            process_type_ in out varchar2,
            err_msg_ in out varchar2)

где:

XXXXX - название процедуры, именно это название указывается в поле payment_codes.p_method.
  rowid_ - входной параметр, указатель на строку из таблицы payment_file_lines.
  payment_code_ - код платёжной системы, его нужно указывать при регистрации платежа в биллинговой системе.

 

Следующие поля могут быть уже определены (это если процедура для данной строки payment_file_lines запускается повторно), однако если они не определены, то их необходимо определить (для ручного управления в будущем):

  client_id_ - ссылка на клиента (clients.client_id)
  account_id_ - ссылка на балансовы счёт (accounts.account_id)
  payment_doc_id_ - ссылка на зарегестрированный платёж
  process_type_ - результат выполнения процедуры (см. ниже)
  err_msg_ - текстовое описание результата выполнения (для пользователя)

 

Зачтёнными или обработанными считаются те записи, у которых поле payment_doc_id is not null. Если запись зачтена, то import_payments.process_file_line пропускает строку.

  Описание поля process_type:
     ' ' - начальное состояние
     'U' - Процедура разноски платежа не определена
     'C' - Клиент не найден
     'A' - Необходимо выбрать БСД для Юр. лица
     'a' - Необходимо выбрать БС для Физ. лица
     'B' - Платежный документ клиента не найден
     'E' - ошибка при регистрации платежа
     'x' - обработано автоматически (payment_doc_id определён)
     'X' - обработано вручную (payment_doc_id определён)
     '.' - помечене как не относящийся к разноске (пропускаем такие)

 

=====================================================================================================

В приложении plPos  доступен справочник:

Главное меню:

 Справочники \ Справочники -> Платежи \ Коды систем платежей.

В этом справочнике можно заводить любые платёжные системы.