Este é meu primeiro pequeno artigo sobre um pequeno desenvolvimento de um programa financeiro, por favor, não julgue estritamente.
Como nem todas as empresas estatais implementaram a troca de mensagens financeiras por meio do sistema de mensagens financeiras do Banco Central da Federação Russa, eu queria desmontar e criar um pequeno protótipo funcional.
O Sistema de Mensagens Financeiras do Banco da Rússia (SPFS) é um canal alternativo para a transmissão de mensagens eletrônicas sobre transações financeiras. O SPFS garante a transmissão ininterrupta de mensagens financeiras dentro do país.
As instituições de crédito e seus clientes - pessoas jurídicas são conectadas ao SPFS assim que estiverem tecnicamente prontas e as relações contratuais com o Banco da Rússia sejam estabelecidas. Os aspectos processuais são determinados por um regulamento separado do Banco da Rússia.
Para desenvolver um esquema de interação em rede, você deve ser orientado pelos seguintes documentos:
- CBRF.61209-049301 "Diretrizes de segurança da informação";
- CBRF.61209-049201 “Estação de trabalho automatizada para um cliente do Banco da Rússia. Manual do usuário";
- CBRF.61209-049202 “Estação de trabalho automatizada para um cliente do Banco da Rússia. Guia do administrador ";
- VAMB.00106-019301 "SCAD" Assinatura "versão 5." Cliente de assinatura "versão 5. Guia do administrador de segurança da informação".
Para enviar mensagens financeiras ao circuito SPFS, existe um software AWK KBR / AWP KBR-N / AWP KBR SPFS.
AWS KBR / AWP KBR SPFS é um software especializado para funcionários de bancos ou grandes organizações governamentais na preparação e envio de mensagens financeiras para o circuito de pagamento do banco central. Este software permite assinar eletronicamente documentos financeiros, verificar e descriptografar mensagens eletrônicas recebidas do Banco da Rússia. Em seu trabalho AWP KBR / AWP KBR SPFS usa o formato de documentos financeiros da UEFBS. Os tipos de mensagens são mensagens de pagamento e informativas (criação de uma mensagem de teste, solicitação de informações técnicas, etc.).
Para processamento, o e-mail deve ser convertido para UEFBS no AWS KBR ou convertido para o ABS do cliente e enviado para o AWS KBR.
Ao trabalhar no modo manual, os e-mails são colocados no diretório AWS KBD c: // uarm3 / exg / cli. O componente integrado "Controle de entrada" analisa o ES de entrada. Se a mensagem foi aprovada com sucesso na validação, ela vai para a guia "inserida", se a mensagem não foi validada, ela vai para a guia "Rejeitadas". Ao trabalhar no modo automático, a mensagem vai para a pasta de saída.
Como parte do desenvolvimento, a seguinte funcionalidade foi implementada:
- criação de mensagens financeiras no formato UEFBS ED101;
- criação de mensagens financeiras no formato UEFBS ED501;
- criação de mensagens financeiras no formato SWIFT MT101;
- armazenamento de mensagens financeiras em banco de dados MS SQL;
- descarga de ordens de pagamento em formato pdf;
- processamento de mensagens recebidas;
Para salvar ordens de pagamento, é necessário desenvolver um menu de configuração (selecionar servidor, banco de dados, nome de usuário, senha).
Definirei as configurações globais de conexão do banco de dados no arquivo app.config. O acesso às configurações globais ocorrerá por meio do ConfigurationManager e chamará a função ReadSetting, atualizando por meio da função AddUpdateAppSettings.
O contador de mensagens (ed501, ed101) durante o dia de operação (dia atual) também será definido através das configurações globais:
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"
Se o dia de operação atual mudou, então o contador é zerado e o primeiro ES recebe o número 1. A
conexão com o banco de dados será realizada via conexão TCP e porta 1433. Para trabalhar com MS SQL, usarei o Microsoft SQL Server Management Studio 2018.
Para exibir os e-mails criados e recebidos para o dia atual / todos os dias, é necessário criar um formulário de exibição (DataGrid).
O Form 1 será gerado na classe Form1.cs. Para salvar uma ordem de pagamento em um formato especializado, é necessário desenvolver configurações globais de salvamento. As configurações de salvamento serão geradas na classe settings.cs.
Para criar uma ordem de pagamento (formulário 0401060 de acordo com o Apêndice 2 do Regulamento do Banco da Rússia datado de 19 de junho de 2012 No. 383-P "Sobre as regras para transferência de fundos" (conforme alterado pelas Instruções do Banco da Rússia datadas de 15 de julho de 2013 No. 3025-U, datado de 29 de abril de 2014 No. 3248-U, de 19/05/2015 Nº 3641-U, de 06/11/2015 Nº 3844-U, de 05.07.2017 Nº 4449-U e de 11.10.2018 Nº 4930-U)) é necessário desenvolver uma interface de usuário especial e um mecanismo para geração automática alguns campos.
A interface do usuário do Formulário # 0401060 é mostrada abaixo:
Este formulário é a principal funcionalidade do sistema, após a criação de uma ordem de pagamento, seus detalhes podem ser transferidos para o banco de dados, gerado um documento PDF, enviado para impressão, salvo no formato apropriado (ed101, ed501, MT101). O formulário é gerado na classe Form2.cs e usando a classe pp.cs para criar uma nova instância da classe CreatePP, os valores do campo serão preenchidos através do modificador de acesso get e set. Para cada campo PP, o nome correspondente é P1-P110 com o modificador de acesso público e as variáveis p1-110 com o modificador de acesso privado.
O snippet de código é mostrado abaixo:
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;
}
Se nem todos os campos foram preenchidos durante o salvamento, o programa irá destacar os campos vazios em vermelho.
Um snippet de código para verificar o campo:
if (textBox10.Text == «»)
{
textBox10.BackColor = Color.Fuchsia;
}
Após chamar a função "create_pdf", será gerado um documento pdf com os campos preenchidos.Na
função "create_pdf" os valores dos campos serão passados como parâmetros, utilizando campos. SetField esses valores serão inseridos no documento PDF.
O snippet de código é mostrado abaixo:
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);
A maioria dos campos é automatizada e não requer entrada do usuário.
O valor gasto com bebida é gerado automaticamente (de acordo com as exigências do Banco Central), o banco pagador, pagador, destinatário, banco destinatário é puxado para cima. TIN, KPP são indicados pelo nome da organização; pelo nome do banco, BIK, a conta de correspondente é aberta.
Documento de formação ED101 Documento de
formação ED501
Enviamos a mensagem gerada por meio de AWS CBD / AWP CBD SPFS para o circuito de pagamentos do Banco Central da Federação Russa.
Depois de enviar o ES ED101 / ED501, recebi um recibo de resposta do Banco Central da Federação Russa sobre o seguinte status:
<?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>
Os campos possuem a seguinte descriptografia:
CorrelationMessageID - a mensagem original gerada pelo AWS KBR;
ResultCode - código de status (000 - bem-sucedido, 001 - malsucedido),
ResultText - o próprio status do ES (recebido com sucesso pelo TS, processado, executado).
Link para o desenvolvimento https://businessarchitecture.ru/test-spfs/ .