Техническое руководство > Импорт платежей > Алгоритм разноски [●] | « пред. | след. » |
Разноска платежей работает по такому алгоритму:
•Процедура 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 доступен справочник:
Главное меню:
Справочники \ Справочники -> Платежи \ Коды систем платежей.
В этом справочнике можно заводить любые платёжные системы.