Привет, Хабр!
Это моя первая небольшая статья про небольшую разработку финансовой программы, прошу строго не судить.
Поскольку не все государственные компании реализовали у себя обмен финансовыми сообщениями через систему передачи финансовых сообщений ЦБ РФ, то мне захотелось самому разобрать и создать небольшой рабочий прототип.
Система передачи финансовых сообщений Банка России (СПФС) — это альтернативный канал передачи электронных сообщений по финансовым операциям. СПФС гарантирует бесперебойность передачи финансовых сообщений внутри страны.
Подключение кредитных организаций и их клиентов — юридических лиц к СПФС происходит по мере их технической готовности и установления договорных отношений с Банком России. Процедурные аспекты определены отдельным нормативным актом Банка России.
Для разработки сетевой схемы взаимодействия необходимо руководствоваться следующими документами:
Для отправки финансовых сообщений в контур СПФС существует программное обеспечение АРМ КБР/АРМ КБР-Н/ АРМ КБР СПФС.
АРМ КБР/ АРМ КБР СПФС – это специализированное программное обеспечение работников банков или крупных государственных организаций для подготовки и отправки финансовых сообщений в платежный контур центрального банка. Данное ПО позволяет проставлять электронную подпись на финансовые документы, проводить проверку и расшифровку электронных сообщений, поступивших из Банка России. В своей работе АРМ КБР/ АРМ КБР СПФС использует формат финансовых документов УФЭБС. Типы сообщений бывают как платежные сообщения, так и информационные (создание тестового сообщения, запрос технической информации и тд).
Для обработки электронное сообщение должно быть преобразовано в УФЭБС на АРМ КБР или преобразовано в АБС клиента и отправлено на АРМ КБР.
![image](https://businessarchitecture.ru/wp-content/uploads/2020/09/3333333.jpg)
Электронные сообщения при работе в ручном режиме помещаются в каталог АРМ КБР c://uarm3/exg/cli. Встроенный компонент «Входной контроль» выполяет анализ поступившего ЭС. Если сообщение успешно прошло валидацию, то оно попадает во вкладку «введены», если сообщение не прошло валидацию, то оно попадает во вкладку «Забракованное». При работе в автоматическом режиме сообщение попадает в выходную папку.
![image](https://businessarchitecture.ru/wp-content/uploads/2020/03/1.png)
В рамках разработки удалось реализовать следующий функционал:
Для сохранения платёжных поручений необходимо разработать меню конфигурации (выбор сервера, базы данных, имя пользователя, пароль).
![image](https://businessarchitecture.ru/wp-content/uploads/2020/09/1.png)
Глобальные настройки подключения к БД я установлю в файле app.config. Доступ к глобальным настройкам будет происходить через СonfigurationManager и вызов функции ReadSetting, обновление через функцию AddUpdateAppSettings.
Счётчик сообщений (ed501, ed101) в течение операционного дня (текущего дня) также будет задан через глобальные настройки:
Если текущий операционной день поменялся, то происходит обнуление счётчика и первому ЭС присваивается номер 1.
Подключение к БД будет осуществлять по TCP соединению и 1433 порту. Для работы с MS SQL я буду использовать Microsoft SQL Server Management studio 2018.
![image](https://sun9-45.userapi.com/c854228/v854228462/211a7f/uz2bufyrD8o.jpg)
Для отображения созданных и принятых электронных сообщений за текущий день/все дни необходимо создать экранную форму (DataGrid).
![image](https://businessarchitecture.ru/wp-content/uploads/2020/09/2-1024x362.png)
Форма 1 будет формироваться в классе Form1.cs. Для сохранения платёжного поручения в специализированный формат необходимо разработать глобальные настройки сохранения. Настройки сохранения будут формироваться в классе settings.cs.
![image](https://sun9-39.userapi.com/c854228/v854228462/211a91/8Xc5upKKmVM.jpg)
Для создания платёжного поручения (форма 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 представлен ниже:
![image](https://businessarchitecture.ru/wp-content/uploads/2020/09/3.png)
Данная форма является основным функционалом системы, после создания платёжного поручения его реквизиты можно передать в БД, сформировать PDF документ, отправить на печать, сохранить в соответствующий формат (ed101, ed501, MT101). Форма формируется в классе Form2.cs и используя класс pp.cs для создания нового экземпляра класса CreatePP, значения полей будет заполняться через модификатор доступа get и set. Для каждого поля ПП присвоен соответствующее название P1-P110 c модификатором доступа public и переменные p1-110 с модификатором доступа private.
Фрагмент кода приведён ниже:
Если при сохранении были заполнены не все поля, то программа выделяет пустые поля красным цветом.
Фрагмент кода для проверки поля:
![image](https://businessarchitecture.ru/wp-content/uploads/2020/03/7.jpg)
После вызова функции «create_pdf» будет формироваться pdf документ с заполненными полями
![image](https://businessarchitecture.ru/wp-content/uploads/2020/09/4.png)
В функцию «create_pdf» в качестве параметров будут передаваться значения полей, c помощью fields. SetField данные значения будут проставляться в PDF документ.
Фрагмент кода приведён ниже:
Большинство полей автоматизированы и не требуют участие пользователя.
Автоматически формируется сумма пропью (согласно требованиям ЦБ), подтягивается банк плательщик, плательщик, получатель, банк получателя. По наименованию организации проставляется ИНН, КПП; по наименованию банка проставляется БИК, корреспондентский счёт.
![image](https://businessarchitecture.ru/wp-content/uploads/2020/09/5.png)
Формируем документ ED101
![image](https://businessarchitecture.ru/wp-content/uploads/2020/09/6.png)
Формируем документ ED501
![image](https://businessarchitecture.ru/wp-content/uploads/2020/09/8-1024x679.png)
Осуществляем отправку сформированного сообщения через АРМ КБР/ АРМ КБР СПФС в платёжный контур ЦБ РФ.
После отправки ЭС ED101/ED501 я получил ответную квитанцию от ЦБ РФ о следующем статусе:
Поля имеют следующую расшифровку:
CorrelationMessageID – исходное сообщение, сформированное АРМ КБР;
ResultCode – код статуса (000 – успешно, 001 — неуспешно),
ResultText – сам статус ЭС (успешно поступило в ТШ, обработано, исполнено).
Ссылка на разработку https://businessarchitecture.ru/test-spfs/.
Это моя первая небольшая статья про небольшую разработку финансовой программы, прошу строго не судить.
Поскольку не все государственные компании реализовали у себя обмен финансовыми сообщениями через систему передачи финансовых сообщений ЦБ РФ, то мне захотелось самому разобрать и создать небольшой рабочий прототип.
Система передачи финансовых сообщений Банка России (СПФС) — это альтернативный канал передачи электронных сообщений по финансовым операциям. СПФС гарантирует бесперебойность передачи финансовых сообщений внутри страны.
Подключение кредитных организаций и их клиентов — юридических лиц к СПФС происходит по мере их технической готовности и установления договорных отношений с Банком России. Процедурные аспекты определены отдельным нормативным актом Банка России.
Для разработки сетевой схемы взаимодействия необходимо руководствоваться следующими документами:
- ЦБРФ.61209-049301«Руководством по обеспечению информационной безопасности»;
- ЦБРФ.61209-049201 «Автоматизированное рабочее место клиента Банка России. Руководство пользователя»;
- ЦБРФ.61209-049202 «Автоматизированное рабочее место клиента Банка России. Руководство администратора»;
- ВАМБ.00106-019301 «СКАД «Сигнатура» версия 5. «Сигнатура-клиент» версия 5. Руководство администратора информационной безопасности».
Для отправки финансовых сообщений в контур СПФС существует программное обеспечение АРМ КБР/АРМ КБР-Н/ АРМ КБР СПФС.
АРМ КБР/ АРМ КБР СПФС – это специализированное программное обеспечение работников банков или крупных государственных организаций для подготовки и отправки финансовых сообщений в платежный контур центрального банка. Данное ПО позволяет проставлять электронную подпись на финансовые документы, проводить проверку и расшифровку электронных сообщений, поступивших из Банка России. В своей работе АРМ КБР/ АРМ КБР СПФС использует формат финансовых документов УФЭБС. Типы сообщений бывают как платежные сообщения, так и информационные (создание тестового сообщения, запрос технической информации и тд).
Для обработки электронное сообщение должно быть преобразовано в УФЭБС на АРМ КБР или преобразовано в АБС клиента и отправлено на АРМ КБР.
![image](https://businessarchitecture.ru/wp-content/uploads/2020/09/3333333.jpg)
Электронные сообщения при работе в ручном режиме помещаются в каталог АРМ КБР c://uarm3/exg/cli. Встроенный компонент «Входной контроль» выполяет анализ поступившего ЭС. Если сообщение успешно прошло валидацию, то оно попадает во вкладку «введены», если сообщение не прошло валидацию, то оно попадает во вкладку «Забракованное». При работе в автоматическом режиме сообщение попадает в выходную папку.
![image](https://businessarchitecture.ru/wp-content/uploads/2020/03/1.png)
В рамках разработки удалось реализовать следующий функционал:
- создание финансовых сообщений в формате УФЭБС ED101;
- создание финансовых сообщений в формате УФЭБС ED501;
- создание финансовых сообщений в формате SWIFT MT101;
- хранение финансовых сообщений в базе данных MS SQL;
- выгрузка платёжных поручений в pdf формате;
- обработка принятых входящих сообщений;
Для сохранения платёжных поручений необходимо разработать меню конфигурации (выбор сервера, базы данных, имя пользователя, пароль).
![image](https://businessarchitecture.ru/wp-content/uploads/2020/09/1.png)
Глобальные настройки подключения к БД я установлю в файле 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.
Подключение к БД будет осуществлять по TCP соединению и 1433 порту. Для работы с MS SQL я буду использовать Microsoft SQL Server Management studio 2018.
![image](https://sun9-45.userapi.com/c854228/v854228462/211a7f/uz2bufyrD8o.jpg)
Для отображения созданных и принятых электронных сообщений за текущий день/все дни необходимо создать экранную форму (DataGrid).
![image](https://businessarchitecture.ru/wp-content/uploads/2020/09/2-1024x362.png)
Форма 1 будет формироваться в классе Form1.cs. Для сохранения платёжного поручения в специализированный формат необходимо разработать глобальные настройки сохранения. Настройки сохранения будут формироваться в классе settings.cs.
![image](https://sun9-39.userapi.com/c854228/v854228462/211a91/8Xc5upKKmVM.jpg)
Для создания платёжного поручения (форма 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 представлен ниже:
![image](https://businessarchitecture.ru/wp-content/uploads/2020/09/3.png)
Данная форма является основным функционалом системы, после создания платёжного поручения его реквизиты можно передать в БД, сформировать 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;
}
![image](https://businessarchitecture.ru/wp-content/uploads/2020/03/7.jpg)
После вызова функции «create_pdf» будет формироваться pdf документ с заполненными полями
![image](https://businessarchitecture.ru/wp-content/uploads/2020/09/4.png)
В функцию «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);
Большинство полей автоматизированы и не требуют участие пользователя.
Автоматически формируется сумма пропью (согласно требованиям ЦБ), подтягивается банк плательщик, плательщик, получатель, банк получателя. По наименованию организации проставляется ИНН, КПП; по наименованию банка проставляется БИК, корреспондентский счёт.
![image](https://businessarchitecture.ru/wp-content/uploads/2020/09/5.png)
Формируем документ ED101
![image](https://businessarchitecture.ru/wp-content/uploads/2020/09/6.png)
Формируем документ ED501
![image](https://businessarchitecture.ru/wp-content/uploads/2020/09/8-1024x679.png)
Осуществляем отправку сформированного сообщения через АРМ КБР/ АРМ КБР СПФС в платёжный контур ЦБ РФ.
После отправки ЭС 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/.