Dies ist mein erster kleiner Artikel über eine kleine Entwicklung eines Finanzprogramms, bitte nicht streng beurteilen.
Da nicht alle staatlichen Unternehmen den Austausch von Finanznachrichten über das Finanznachrichtensystem der Zentralbank der Russischen Föderation implementiert haben, wollte ich selbst einen kleinen funktionierenden Prototyp zerlegen und erstellen.
Das Financial Messaging System (SPFS) der Bank von Russland ist ein alternativer Kanal für die Übertragung elektronischer Nachrichten zu Finanztransaktionen. SPFS garantiert eine unterbrechungsfreie Übertragung von Finanznachrichten innerhalb des Landes.
Kreditinstitute und ihre Mandanten - juristische Personen sind mit dem SPFS verbunden, sobald sie technisch bereit sind und vertragliche Beziehungen zur Bank von Russland hergestellt werden. Verfahrensaspekte werden durch einen gesonderten normativen Akt der Bank von Russland festgelegt.
Um ein Netzwerkinteraktionsschema zu entwickeln, müssen Sie sich an den folgenden Dokumenten orientieren:
- CBRF.61209-049301 "Richtlinien zur Informationssicherheit";
- CBRF.61209-049201 „Automatisierte Workstation für einen Kunden der Bank of Russia. Handbuch";
- CBRF.61209-049202 „Automatisierte Workstation für einen Kunden der Bank of Russia. Administratorhandbuch ";
- VAMB.00106-019301 "SCAD" Signature "Version 5." Signature-Client "Version 5. Administratorhandbuch für Informationssicherheit".
Zum Senden von Finanznachrichten an die SPFS-Schaltung gibt es eine Software AWK KBR / AWP KBR-N / AWP KBR SPFS.
AWP KBR / AWP KBR SPFS ist eine spezielle Software für Mitarbeiter von Banken oder großen Regierungsorganisationen zum Vorbereiten und Senden von Finanznachrichten an den Zahlungskreis der Zentralbank. Mit dieser Software können Sie Finanzdokumente elektronisch signieren, elektronische Nachrichten von der Bank of Russia überprüfen und entschlüsseln. AWP KBR / AWP KBR SPFS verwendet in seiner Arbeit das Format der Finanzdokumente der UEFBS. Die Nachrichtentypen sind sowohl Zahlungsnachrichten als auch Informationsnachrichten (Erstellen einer Testnachricht, Anfordern technischer Informationen usw.).
Zur Verarbeitung muss die E-Mail auf dem AWS KBR in UEFBS konvertiert oder in das ABS des Kunden konvertiert und an das AWS KBR gesendet werden.
Im manuellen Modus werden E-Mails im AWS KBD-Verzeichnis c: // uarm3 / exg / cli abgelegt. Die eingebaute Komponente "Incoming Control" analysiert die eingehende ES. Wenn die Nachricht die Validierung erfolgreich bestanden hat, wechselt sie zur Registerkarte "Eingegeben". Wenn die Nachricht nicht validiert wurde, wechselt sie zur Registerkarte "Abgelehnt". Wenn Sie im automatischen Modus arbeiten, wird die Nachricht in den Ausgabeordner verschoben.
Im Rahmen der Entwicklung wurde folgende Funktionalität implementiert:
- Erstellung von Finanznachrichten im UEFBS ED101-Format;
- Erstellung von Finanznachrichten im UEFBS ED501-Format;
- Erstellung von Finanznachrichten im SWIFT MT101-Format;
- Speichern von Finanznachrichten in der MS SQL-Datenbank;
- Entladen von Zahlungsaufträgen im PDF-Format;
- Verarbeitung empfangener eingehender Nachrichten;
Um Zahlungsaufträge zu speichern, muss ein Konfigurationsmenü erstellt werden (Server, Datenbank, Benutzername, Passwort auswählen).
Ich werde die globalen Datenbankverbindungseinstellungen in der Datei app.config festlegen. Der Zugriff auf die globalen Einstellungen erfolgt über den ConfigurationManager und ruft die ReadSetting-Funktion auf. Die Aktualisierung erfolgt über die AddUpdateAppSettings-Funktion.
Der Nachrichtenzähler (ed501, ed101) während des Betriebstages (aktueller Tag) wird ebenfalls über die globalen Einstellungen eingestellt:
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"
Wenn sich der aktuelle Betriebstag geändert hat, wird der Zähler zurückgesetzt und dem ersten ES wird die Nummer 1 zugewiesen. Die
Verbindung zur Datenbank erfolgt über die TCP-Verbindung und Port 1433. Um mit MS SQL zu arbeiten, verwende ich Microsoft SQL Server Management Studio 2018.
Um die erstellten und empfangenen E-Mails für den aktuellen Tag / alle Tage anzuzeigen, müssen Sie ein Anzeigeformular (DataGrid) erstellen.
Formular 1 wird in der Klasse Form1.cs generiert. Um einen Zahlungsauftrag in einem speziellen Format zu speichern, müssen globale Speichereinstellungen entwickelt werden. Die Speichereinstellungen werden in der Klasse settings.cs generiert.
So erstellen Sie einen Zahlungsauftrag (Formular 0401060 gemäß Anhang 2 der Verordnung der Bank von Russland vom 19. Juni 2012 Nr. 383-P "Über die Regeln für den Geldtransfer" (geändert durch die Anweisungen der Bank von Russland vom 15. Juli 2013 Nr. 3025-U vom 29. April 2014 Nr. 3248-U vom 19.05.2015 Nr. 3641-U vom 06.11.2015 Nr. 3844-U vom 05.07.2017 Nr. 4449-U vom 11.10.2018 Nr. 4930-U)) Es ist erforderlich, eine spezielle Benutzeroberfläche und einen Mechanismus für die automatische Generierung zu entwickeln einige Felder.
Die Benutzeroberfläche des Formulars # 0401060 ist unten dargestellt:
Dieses Formular ist die Hauptfunktionalität des Systems. Nach dem Erstellen eines Zahlungsauftrags können seine Details in die Datenbank übertragen, ein PDF-Dokument erstellt, zum Drucken gesendet und im entsprechenden Format (ed101, ed501, MT101) gespeichert werden. Das Formular wird in der Form2.cs-Klasse generiert. Mithilfe der pp.cs-Klasse zum Erstellen einer neuen Instanz der CreatePP-Klasse werden die Feldwerte über den Modifikator get und set access ausgefüllt. Für jedes PP-Feld lautet der entsprechende Name P1-P110 mit dem Modifikator für den öffentlichen Zugriff und die Variablen p1-110 mit dem Modifikator für den privaten Zugriff.
Das Code-Snippet wird unten gezeigt:
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;
}
Wenn beim Speichern nicht alle Felder ausgefüllt wurden, hebt das Programm die leeren Felder rot hervor.
Ein Codeausschnitt zum Überprüfen des Feldes:
if (textBox10.Text == «»)
{
textBox10.BackColor = Color.Fuchsia;
}
Nach dem Aufruf der Funktion "create_pdf" wird ein PDF-Dokument mit ausgefüllten Feldern generiert.
In der Funktion "create_pdf" werden die Feldwerte mithilfe von Feldern als Parameter übergeben. SetField Diese Werte werden in das PDF-Dokument eingefügt.
Das Code-Snippet wird unten gezeigt:
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);
Die meisten Felder sind automatisiert und erfordern keine Benutzereingaben.
Der für Getränke ausgegebene Betrag wird automatisch generiert (gemäß den Anforderungen der Zentralbank), die Zahlerbank, der Zahler, der Empfänger und die Bank des Empfängers werden abgerufen. TIN, KPP werden mit dem Namen der Organisation angegeben. Unter dem Namen der Bank, BIK, wird das Korrespondenzkonto eingetragen.
Formulardokument ED101
Formulardokument ED501
Wir senden die generierte Nachricht über AWS CBD / AWP CBD SPFS an den Zahlungskreis der Zentralbank der Russischen Föderation.
Nach dem Senden der ES ED101 / ED501 erhielt ich von der Zentralbank der Russischen Föderation eine Antwortquittung über den folgenden 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>
Die Felder haben die folgende Entschlüsselung:
CorrelationMessageID - die ursprüngliche Nachricht, die vom AWS KBR generiert wurde;
ResultCode - Statuscode (000 - erfolgreich, 001 - nicht erfolgreich),
ResultText - ES-Status selbst (erfolgreich von TS empfangen, verarbeitet, ausgeführt).
Link zur Entwicklung https://businessarchitecture.ru/test-spfs/ .