Développement d'un module de création de messages financiers pour AWP KBR / AWP KBR-SPFS

Bonjour, Habr!



Ceci est mon premier petit article sur un petit développement d'un programme financier, ne jugez pas strictement.



Étant donné que toutes les entreprises publiques n'ont pas mis en œuvre l'échange de messages financiers via le système de messagerie financière de la Banque centrale de la Fédération de Russie, j'ai voulu démonter et créer moi-même un petit prototype fonctionnel.



Le système de messagerie financière (SPFS) de la Banque de Russie est un canal alternatif pour la transmission de messages électroniques sur les transactions financières. Le SPFS garantit une transmission ininterrompue des messages financiers dans le pays.



Les établissements de crédit et leurs clients - les personnes morales sont liées au SPFS dès qu'elles sont techniquement prêtes et que des relations contractuelles avec la Banque de Russie sont établies. Les aspects procéduraux sont déterminés par un règlement distinct de la Banque de Russie.



Pour développer un schéma d'interaction réseau, vous devez être guidé par les documents suivants:



  1. CBRF.61209-049301 "Directives de sécurité de l'information";
  2. CBRF.61209-049201 «Poste de travail automatisé pour un client de la Banque de Russie. Manuel d'utilisation";
  3. CBRF.61209-049202 «Poste de travail automatisé pour un client de la Banque de Russie. Guide de l'administrateur ";
  4. VAMB.00106-019301 "SCAD" Signature "version 5." Signature-client "version 5. Guide de l'administrateur de la sécurité de l'information".


Pour envoyer des messages financiers au circuit SPFS, il existe un logiciel AWK KBR / AWP KBR-N / AWP KBR SPFS.



AWP KBR / AWP KBR SPFS est un logiciel spécialisé pour les employés de banques ou de grandes organisations gouvernementales pour la préparation et l'envoi de messages financiers au circuit de paiement de la banque centrale. Ce logiciel vous permet de signer électroniquement des documents financiers, de vérifier et de décrypter les messages électroniques reçus de la Banque de Russie. Dans ses travaux, AWP KBR / AWP KBR SPFS utilise le format des documents financiers de l'UEFBS. Les types de messages sont à la fois des messages de paiement et d'information (création d'un message de test, demande d'informations techniques, etc.).



Pour le traitement, l'e-mail doit être converti en UEFBS sur AWS KBR ou converti en ABS du client et envoyé à AWS KBR.



image



Lorsque vous travaillez en mode manuel, les e-mails sont placés dans le répertoire AWS KBD c: // uarm3 / exg / cli. Le composant intégré "Contrôle entrant" analyse l'ES entrant. Si le message a passé avec succès la validation, alors il passe dans l'onglet "entré", si le message n'a pas été validé, alors il va dans l'onglet "Rejeté". Lorsque vous travaillez en mode automatique, le message va dans le dossier de sortie.



image



Dans le cadre du développement, les fonctionnalités suivantes ont été implémentées:



  1. création de messages financiers au format UEFBS ED101;
  2. création de messages financiers au format UEFBS ED501;
  3. création de messages financiers au format SWIFT MT101;
  4. stockage des messages financiers dans la base de données MS SQL;
  5. déchargement des ordres de paiement au format pdf;
  6. traitement des messages entrants reçus;


Pour enregistrer les ordres de paiement, il est nécessaire de développer un menu de configuration (sélectionner un serveur, une base de données, un nom d'utilisateur, un mot de passe).



image



Je vais définir les paramètres de connexion à la base de données globale dans le fichier app.config. L'accès aux paramètres globaux se fera via ConfigurationManager et appelera la fonction ReadSetting, mise à jour via la fonction AddUpdateAppSettings.



Le compteur de messages (ed501, ed101) pendant la journée de fonctionnement (jour en cours) sera également réglé via les paramètres globaux:



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 le jour de fonctionnement actuel a changé, le compteur est réinitialisé et le premier ES reçoit le numéro 1. La



connexion à la base de données se fera via la connexion TCP et le port 1433. Pour travailler avec MS SQL, j'utiliserai Microsoft SQL Server Management Studio 2018.



image



Pour afficher les e-mails créés et reçus pour la journée en cours / tous les jours, vous devez créer un formulaire d'affichage (DataGrid).



image



Le formulaire 1 sera généré dans la classe Form1.cs. Pour enregistrer un ordre de paiement dans un format spécialisé, il est nécessaire de développer des paramètres d'enregistrement globaux. Les paramètres d'enregistrement seront générés dans la classe settings.cs.



image



Pour créer un ordre de paiement (formulaire 0401060 conformément à l'annexe 2 du règlement de la Banque de Russie du 19 juin 2012 n ° 383-P "Sur les règles de transfert de fonds" (tel que modifié par les instructions de la Banque de Russie du 15 juillet 2013 n ° 3025-U, du 29 avril 2014 n °. 3248-U, du 19/05/2015 n ° 3641-U, du 06.11.2015 n ° 3844-U, du 05.07.2017 n ° 4449-U et du 11.10.2018 n ° 4930-U)) il est nécessaire de développer une interface utilisateur spéciale et un mécanisme de génération automatique certains champs.



L'interface utilisateur du formulaire # 0401060 est illustrée ci-dessous:



image



Ce formulaire est la fonctionnalité principale du système, après avoir créé un ordre de paiement, ses détails peuvent être transférés dans la base de données, généré un document PDF, envoyé à l'impression, sauvegardé dans le format approprié (ed101, ed501, MT101). Le formulaire est généré dans la classe Form2.cs et en utilisant la classe pp.cs pour créer une nouvelle instance de la classe CreatePP, les valeurs de champ seront remplies via le modificateur d'accès get et set. Pour chaque champ PP, le nom correspondant est P1-P110 avec le modificateur d'accès public et les variables p1-110 avec le modificateur d'accès privé.



L'extrait de code est illustré ci-dessous:



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 tous les champs n'ont pas été remplis pendant la sauvegarde, le programme mettra en évidence les champs vides en rouge.



Un extrait de code pour vérifier le champ:



if (textBox10.Text == «»)
{
textBox10.BackColor = Color.Fuchsia;
}


image



Après avoir appelé la fonction "create_pdf", un document pdf avec des champs remplis sera généré.



image



Dans la fonction "create_pdf", les valeurs des champs seront passées en paramètres, en utilisant des champs. SetField ces valeurs seront insérées dans le document PDF.



L'extrait de code est illustré ci-dessous:



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 plupart des champs sont automatisés et ne nécessitent aucune saisie de l'utilisateur.



Le montant dépensé en boisson est généré automatiquement (selon les exigences de la Banque centrale), la banque du payeur, le payeur, le destinataire, la banque du destinataire est extrait. TIN, KPP sont indiqués par le nom de l'organisation; par le nom de la banque, BIK, le compte correspondant est déposé.



image



Document de formation ED101 Document de



image



formation ED501



image



Nous envoyons le message généré via AWS CBD / AWP CBD SPFS au circuit de paiement de la Banque centrale de la Fédération de Russie.



Après avoir envoyé l'ES ED101 / ED501, j'ai reçu un accusé de réception de la Banque centrale de la Fédération de Russie concernant le statut suivant:



<?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>


Les champs ont le décryptage suivant:



CorrelationMessageID - le message d'origine généré par AWS KBR;

ResultCode - code d'état (000 - succès, 001 - échec),

ResultText - état ES lui-même (reçu avec succès par TS, traité, exécuté).



Lien vers le développement https://businessarchitecture.ru/test-spfs/ .



All Articles