Разработка модуля создания финансовых сообщений «Передатчик ПС БР»

В рамках программного модуля «Передатчик ПС БР» предполагается реализовать следующий функционал:

  • создание финансовых сообщений в формате УФЭБС ED101;
  • создание финансовых сообщений в формате УФЭБС ED501;
  • создание финансовых сообщений в формате SWIFT MT101;
  • хранение финансовых сообщений в базе данных;
  • выгрузка платёжных поручений в pdf формате;
  • обработка принятых входящих сообщений;

Данный модуль можно считать практически полноценной АБС.  Сформированные в АБС реестры будут отправляться в АРМ КБР (автоматизированное рабочее место клиента Банка России) — специальный компьютер в банке в отдельном защищённом контуре, с которого уходят платежи в ЦБ РФ. 

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

  • комплексное обеспечение банковской деятельности (единство документооборота, отчётности, пакетная обработка данных);
  • лёгкость интеграции, возможность простого модульного расширения функциональности;
  • защищённость, безопасность;
  • достоверность данных, оперативное обновление информации, учёт специфики работы коммерческой структуры.

Разработка приложения будет осуществляться в Visual Studio 2017. В качестве хранилища данных будет использоваться MS SQL Server 2019.

Версии программы будут храниться в системе хранения версий – GitHub, репозиторий https://github.com/aovakur/Peredatchik_PSBR. Количество веток – две (master и release). В ветку мастер я буду выкладывать доработанные формы и функции, в ветку релиз буду выкладывать собранный релиз со всеми библиотеками и необходимыми таблицами. 

Для сохранения платёжных поручений необходимо разработать меню конфигурации (выбор сервера, базы данных, имя пользователя, пароль).

Разработанное подключение к БД представлено на рисунке 3.3. Имя и пароль пользователя будет скрыто от пользователя. По умолчанию имя пользователя – adminkbr, пароль aA12345678.

Данные для подключения будут храниться в классе DBUtils.cs, инициализация подключения будет происходить в классе DBSQLServerUtils.cs.

Глобальные настройки подключения к БД я установлю в файле app.config.

Доступ к глобальным настройкам будет происходить через СonfigurationManager и вызов функции ReadSetting, обновление через функцию AddUpdateAppSettings.

Счётчик сообщений (ed501, ed101) в течение операционного дня (текущего дня) также будет задан через глобальные настройки:

<add key=»currentday» value=»20200416″ />

<add key=»EDNo» value=»2″ />

<add key=»MessageName» value=»10836708462″ />

<add key=»MessageIDED501″ value=»2″ />

<add key=»MessageIDED501_full» value=»10836708462_pain_MSG_20200416_00000002″ />

 Если текущий операционной день поменялся, то происходит обнуление счётчика и первому ЭС присваивается номер 1.

Для разработки и тестирования программы я буду использовать локальный Microsoft SQL Server 2019, в будущем таблицу можно будет перенести на облачный сервер или сервер БД в организации.

Подключение к БД будет осуществлять по TCP соединению и 1433 порту. Для работы с MS SQL я буду использовать Microsoft SQL Server Management studio 2018.

Для отображения созданных и принятых электронных сообщений необходимо создать экранную форму (DataGrid).

Форма 1 будет формироваться в классе Form1.cs. Для сохранения платёжного поручения в специализированный формат необходимо разработать глобальные настройки сохранения. Настройки сохранения будут формироваться в классе settings.cs.

Для создания платёжного поручения (форма 0401060 согласно Приложению 2 Положения Банка России от 19 июня 2012 года № 383-П «О правилах осуществления перевода денежных средств» (в редакции Указаний Банка России от 15.07.2013 № 3025-У, от 29.04.2014 № 3248-У, от 19.05.2015 № 3641-У, от 06.11.2015 N 3844-У, от 05.07.2017 N 4449-У и от 11.10.2018 N 4930-У)) необходимо разработать специальный пользовательский интерфейс и механизм автоматического формирования некоторых полей.

Пользовательский интерфейс формы №0401060 представлен ниже

Данная форма является основным функционалом системы, после создания платёжного поручения его реквизиты можно передать в БД, сформировать PDF документ, отправить на печать, сохранить в соответствующий формат (ed101, ed501, MT101). Форма формируется в классе Form2.cs и используя класс pp.cs для создания нового экземпляра класса CreatePP, значения полей будет заполняться через модификатор доступа get и set. Для каждого поля ПП присвоен соответствующее название P1-P110 c модификатором доступа public и переменные p1-110 с модификатором доступа private.

Фрагмент кода приведён ниже:  

private string p1;

private string p0;

private int p2;

private int p3;

private string p4;

private string p5;

public string P0

        {

            get { return p0; }

            set { p0 = value; }

        }

        public int P20

        {

            get { return p20; }

            set { p20 = value; }

        }

        public string Status

        {

            get { return status; }

            set { status = «Новое»; }

        }

        public string P1

        {

            get { return p1; }

            set { p1 = «Платежное поручение»; }

        }

       public string Date_pp()

        {

            DateTime dt = DateTime.Now;

            string curDate = dt.ToShortDateString();

            return curDate;

        }

Если при сохранении были заполнены не все поля, то программа выделяет пустые поля красным цветом.

Фрагмент кода для проверки поля:

if (textBox10.Text == «»)

{

textBox10.BackColor = Color.Fuchsia;

}

После вызова функции «create_pdf» будет формироваться pdf документ с заполненными полями

В функцию «create_pdf» в качестве параметров будут передаваться значения полей, c помощью fields. SetField данные значения будут проставляться в PDF документ.

Фрагмент кода приведён ниже:

public string Pdf(string p0, string p4, string p6, string p60, string p102, int p7, string p8, string p9, string p10, string p11, string p12, int p101, string p13, string p14, string p15, string p17, string p18, string p61, string p103, string p16, int p21, string p24, string p5, string p22, string p104, string p105, string p106, string p107, string p108, string p109, string p110)

        {  string pathsafe = settings.safepathpdf + p4 + «_» + p0 + «.pdf»;

            string pathsafetemplatefont = settings.safepath + «\\Template\\Tahoma.ttf»;

            BaseFont baseFont = BaseFont.CreateFont(pathsafetemplatefont, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

            PdfReader template = new PdfReader(settings.safepathetemplate);

            PdfStamper stamper = new PdfStamper(template, new FileStream(pathsafe, FileMode.Create));

            AcroFields fields = stamper.AcroFields;

            fields.AddSubstitutionFont(baseFont);

            fields.SetField(«p4», p4);

            fields.SetField(«p3», p0);

            fields.SetField(«p6», p6);

Большинство полей автоматизированы и не требуют участие пользователя.

Автоматически формируется сумма пропью (согласно требованиям ЦБ), подтягивается банк плательщик, плательщик, получатель, банк получателя. По наименованию организации проставляется ИНН, КПП; по наименованию банка проставляется БИК, корреспондентский счёт.

Производим установку и запуск программы «Передатчик ПС БР» от имени пользователя. Заполняем поля платёжного поручения

Формируем документ ED101 и анализируем результат сохранения

C помощью XMLPAD проводим сопоставление нашего файла ED101 и его XSD схемы.

Наш созданный файл ED101 не имеет логических ошибок и может быть успешно перенесён в АРМ КБР (АРМ КБР СПФС) для отправки в ЦБ РФ.

Провести проверку созданного ED501 невозможно из-за отсутствия стандартизированной схемы, атрибутивный состав каждый банк выбирает самостоятельно.

следующем образом:

<?xml version=»1.0″ encoding=»WINDOWS-1251″?>

<ED501 xmlns=»urn:cbr-ru:ed:v2.0″ EDAuthor=»3510108000″ EDDate=»2014-09-22″ EDNo=»900004″ ActualReceiver =»3510106000″>

<ProprietoryDocument >QT4+MUk1PTg1IDcwOj40OEA+MjA9PT41ICAyIGJhc2U2NA==</ProprietoryDocument></ED501>

где ProprietoryDocument – подписанный документ.

Осуществляем отправку сформированного сообщения через АРМ КБР/ АРМ КБР СПФС в платёжный контур ЦБ РФ.

После отправки ЭС ED101/ED501 я получил ответную квитанцию от ЦБ РФ о о следующем статусе:

<?xml version=»1.0″ encoding=»utf-8″?><soapenv:Envelope xmlns:soapenv=»http://www.w3.org/2003/05/soap-envelope»><soapenv:Header><props:MessageInfo xmlns:props=»urn:cbr-ru:msg:props:v1.3″><props:To>uic:452500055555</props:To><props:From>uic:KBRGATE</props:From><props:MessageID>KBRGATE_guid:786df05a239943f3bc9eca41a6fc430a</props:MessageID><props:CorrelationMessageID>guid:786df05a239943f3bc9eca41a6fc430a</props:CorrelationMessageID><props:MessageType>3</props:MessageType><props:Priority>5</props:Priority><props:CreateTime>2019-08-06T07:46:04Z</props:CreateTime><props:SendTime>2019-08-06T07:46:04Z</props:SendTime></props:MessageInfo><props:AcknowledgementInfo xmlns:props=»urn:cbr-ru:msg:props:v1.3″><props:AcknowledgementType>2</props:AcknowledgementType><props:ResultCode>0000</props:ResultCode><props:ResultText>ЭС поступило в ТШ КБР:uic:777777700011. Информация о исходном сообщении: имя файла: ED997_06104603.dat. Адресная информация исходного сообщения: логический адрес отправителя: uic:452500055555, логический адрес получателя: uic:777777700011. Время формирования квитанции: 2019-08-06 07:46:04</props:ResultText>

</props:AcknowledgementInfo></soapenv:Header><soapenv:Body></soapenv:Body></soapenv:Envelope>

Поля имеют следующую расшифровку:

  • CorrelationMessageID – исходное сообщение, сформированное АРМ КБР;
  • ResultCode – код статуса (000 – успешно, 001 — неуспешно),
  • ResultText – сам статус ЭС (успешно поступило в ТШ, обработано, исполнено).

Ссылка на разработку https://businessarchitecture.ru/test-spfs

Клиент-серверное приложение, язык разработки C#, база данных MS SQL

Скачать программу можно по ссылке https://sourceforge.net/projects/peredatchikpsbr/

Тестовая база данных http://developcbs.ru/downloads/ps_bankrussia_test.bak

Скачать дистрибутив http://developcbs.ru/downloads/Setup.msi
E-mail для связи: andrey@businessarchitecture.ru,

Телефон: +7 (930) 946-81-61 (Андрей)