Este es mi primer artículo pequeño sobre un pequeño desarrollo de un programa financiero, por favor no juzgue estrictamente.
Dado que no todas las empresas estatales han implementado el intercambio de mensajes financieros a través del sistema de mensajes financieros del Banco Central de la Federación de Rusia, quería desmontar y crear un pequeño prototipo funcional.
El sistema de mensajería financiera del Banco de Rusia (SPFS) es un canal alternativo para la transmisión de mensajes electrónicos sobre transacciones financieras. El PESA garantiza la transmisión ininterrumpida de mensajes financieros dentro del país.
Las instituciones de crédito y sus clientes: las entidades legales se conectan al PESA tan pronto como están técnicamente preparadas y se establecen relaciones contractuales con el Banco de Rusia. Los aspectos de procedimiento están determinados por una regulación separada del Banco de Rusia.
Para desarrollar un esquema de interacción de red, debe guiarse por los siguientes documentos:
- CBRF.61209-049301 "Directrices de seguridad de la información";
- CBRF.61209-049201 “Estación de trabajo automatizada para un cliente del Banco de Rusia. Manual de usuario";
- CBRF.61209-049202 “Estación de trabajo automatizada para un cliente del Banco de Rusia. Guía del administrador ";
- VAMB.00106-019301 "SCAD" Signature "versión 5." Signature-client "versión 5. Guía del administrador de seguridad de la información".
Para enviar mensajes financieros al circuito SPFS, existe el software AWK KBR / AWP KBR-N / AWP KBR SPFS.
AWP KBR / AWP KBR SPFS es un software especializado para empleados de bancos o grandes organizaciones gubernamentales para la preparación y envío de mensajes financieros al circuito de pagos del banco central. Este software le permite firmar electrónicamente documentos financieros, verificar y descifrar mensajes electrónicos recibidos del Banco de Rusia. En su trabajo, AWP KBR / AWP KBR SPFS utiliza el formato de documentos financieros de UEFBS. Los tipos de mensajes son tanto de pago como informativos (crear un mensaje de prueba, solicitar información técnica, etc.).
Para su procesamiento, el correo electrónico debe convertirse a UEFBS en AWS KBR o convertirse al ABS del cliente y enviarse a AWS KBR.
Cuando se trabaja en modo manual, los correos electrónicos se colocan en el directorio AWS KBD c: // uarm3 / exg / cli. El componente integrado "Control entrante" analiza el ES entrante. Si el mensaje ha pasado con éxito la validación, entonces va a la pestaña "ingresado", si el mensaje no ha sido validado, entonces va a la pestaña "Rechazado". Cuando se trabaja en modo automático, el mensaje va a la carpeta de salida.
Como parte del desarrollo, se implementó la siguiente funcionalidad:
- creación de mensajes financieros en el formato UEFBS ED101;
- creación de mensajes financieros en el formato UEFBS ED501;
- creación de mensajes financieros en formato SWIFT MT101;
- almacenar mensajes financieros en la base de datos MS SQL;
- descarga de órdenes de pago en formato pdf;
- procesamiento de mensajes entrantes recibidos;
Para guardar las órdenes de pago, es necesario desarrollar un menú de configuración (seleccionar servidor, base de datos, nombre de usuario, contraseña).
Estableceré la configuración de conexión de la base de datos global en el archivo app.config. El acceso a la configuración global se realizará a través del ConfigurationManager y se llamará a la función ReadSetting, actualizándose a través de la función AddUpdateAppSettings.
El contador de mensajes (ed501, ed101) durante el día de funcionamiento (día actual) también se configurará a través de la configuración global:
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"
Si el día de funcionamiento actual ha cambiado, el contador se pone a cero y al primer ES se le asigna el número 1. La
conexión a la base de datos se realizará mediante una conexión TCP y el puerto 1433. Para trabajar con MS SQL, usaré Microsoft SQL Server Management studio 2018.
Para mostrar los correos electrónicos creados y recibidos para el día actual / todos los días, debe crear un formulario de visualización (DataGrid).
El formulario 1 se generará en la clase Form1.cs. Para guardar una orden de pago en un formato especializado, es necesario desarrollar una configuración de guardado global. Los ajustes guardados se generarán en la clase settings.cs.
Para crear una orden de pago (formulario 0401060 de acuerdo con el Apéndice 2 del Reglamento del Banco de Rusia con fecha 19 de junio de 2012 No. 383-P "Sobre las reglas para transferir fondos" (según enmendado por las Instrucciones del Banco de Rusia con fecha 15 de julio de 2013 No. 3025-U, de fecha 29 de abril de 2014 No. 3248-U, de fecha 19.05.2015 No. 3641-U, fecha 06.11.2015 No. 3844-U, fecha 05.07.2017 No. 4449-U y fecha 11.10.2018 No. 4930-U)) es necesario desarrollar una interfaz de usuario especial y un mecanismo para la generación automática algunos campos.
La interfaz de usuario del formulario # 0401060 se muestra a continuación:
Este formulario es la principal funcionalidad del sistema, luego de crear una orden de pago, sus detalles se pueden transferir a la base de datos, generar un documento PDF, enviar a imprimir, guardar en el formato apropiado (ed101, ed501, MT101). El formulario se genera en la clase Form2.cs y utilizando la clase pp.cs para crear una nueva instancia de la clase CreatePP, los valores de campo se completarán mediante el modificador de acceso get y set. Para cada campo PP, el nombre correspondiente es P1-P110 con el modificador de acceso público y las variables p1-110 con el modificador de acceso privado.
El fragmento de código se muestra a continuación:
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;
}
Si no se completaron todos los campos durante el guardado, el programa resaltará los campos vacíos en rojo.
Un fragmento de código para verificar el campo:
if (textBox10.Text == «»)
{
textBox10.BackColor = Color.Fuchsia;
}
Luego de llamar a la función "create_pdf", se generará un documento pdf con campos llenos,
en la función "create_pdf" los valores de los campos se pasarán como parámetros, utilizando campos. SetField estos valores se insertarán en el documento PDF.
El fragmento de código se muestra a continuación:
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);
La mayoría de los campos están automatizados y no requieren la intervención del usuario.
El monto gastado en bebida se genera automáticamente (de acuerdo con los requisitos del Banco Central), se levanta el banco pagador, pagador, destinatario, banco del destinatario. TIN, KPP se colocan con el nombre de la organización; BIK, la cuenta corresponsal se pone a nombre del banco.
Formando documento ED101
Formando documento ED501
Enviamos el mensaje generado a través de AWS CBD / AWP CBD SPFS al circuito de pago del Banco Central de la Federación Rusa.
Después de enviar el ES ED101 / ED501, recibí un recibo de respuesta del Banco Central de la Federación de Rusia sobre el siguiente estado:
<?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>
Los campos tienen el siguiente descifrado:
CorrelationMessageID: el mensaje original generado por AWS KBR;
ResultCode - código de estado (000 - exitoso, 001 - no exitoso),
ResultText - estado del ES en sí mismo (recibido exitosamente por TS, procesado, ejecutado).
Enlace al desarrollo https://businessarchitecture.ru/test-spfs/ .