AWP KBR / AWPKBR-SPFSの財務メッセージを作成するためのモジュールの開発

こんにちは、Habr!



これは、金融プログラムの小さな発展についての私の最初の小さな記事です。厳密に判断しないでください。



すべての国営企業がロシア連邦中央銀行の金融メッセージシステムを介して金融メッセージの交換を実装しているわけではないので、私は自分で小さな実用的なプロトタイプを分解して作成したいと思いました。



Bank of Russia Financial Messaging System(SPFS)は、金融取引に関する電子メッセージを送信するための代替チャネルです。 SPFSは、国内での財務メッセージの中断のない送信を保証します。



クレジット機関とそのクライアント-法的エンティティは、技術的に準備が整い、ロシア銀行との契約関係が確立されるとすぐにSPFSに接続されます。手続きの側面は、ロシア銀行の別個の規制によって決定されます。



ネットワーク相互作用スキームを開発するには、次のドキュメントを参照する必要があります。



  1. CBRF.61209-049301「情報セキュリティガイドライン」;
  2. CBRF.61209-049201「ロシア銀行のクライアント向けの自動ワークステーション。ユーザーマニュアル」;
  3. CBRF.61209-049202「BankofRussiaクライアント用の自動ワークステーション。管理者ガイド ";
  4. VAMB.00106-019301「SCAD」署名「バージョン5」署名クライアント「バージョン5.情報セキュリティ管理者ガイド」。


SPFS回線に財務メッセージを送信するために、ソフトウェアAWK KBR / AWP KBR-N / AWP KBRSPFSがあります。



AWP KBR / AWP KBR SPFSは、中央銀行の支払い回路に財務メッセージを準備して送信するための、銀行または大規模な政府組織の従業員向けの専用ソフトウェアです。このソフトウェアを使用すると、財務書類に電子署名し、ロシア銀行から受信した電子メッセージを確認および復号化できます。その作業において、AWP KBR / AWP KBR SPFSは、UEFBSの財務書類の形式を使用します。メッセージの種類は、支払いメッセージと情報(テストメッセージの作成、技術情報の要求など)の両方です。



処理するには、電子メールをAWS KBRでUEFBSに変換するか、クライアントのABSに変換してAWSKBRに送信する必要があります。



画像



手動モードで作業している場合、電子メールはAWS KBDディレクトリc:// uarm3 / exg / cliに配置されます。組み込みコンポーネント「着信制御」は、着信ESを分析します。メッセージが検証に正常に合格した場合は「入力済み」タブに移動し、メッセージが検証されていない場合は「拒否済み」タブに移動します。自動モードで作業している場合、メッセージは出力フォルダーに送られます。



画像



開発の一環として、次の機能が実装されました。



  1. UEFBSED101形式の財務メッセージの作成。
  2. UEFBSED501形式の財務メッセージの作成。
  3. SWIFTMT101形式の財務メッセージの作成。
  4. 財務メッセージをMSSQLデータベースに保存する。
  5. pdf形式の支払い注文のアンロード。
  6. 受信した着信メッセージの処理。


支払い注文を保存するには、構成メニューを作成する必要があります(サーバー、データベース、ユーザー名、パスワードを選択します)。



画像



app.configファイルでグローバルデータベース接続設定を行います。グローバル設定へのアクセスは、ConfigurationManagerを介して行われ、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"


現在の営業日が変更された場合、カウンターがリセットされ、最初のESに番号1が割り当てられます。



データベースへの接続は、TCP接続とポート1433を介して実行されます。 MS SQLを使用するには、Microsoft SQL Server Management Studio 2018



画像



使用します。作成および受信した電子メールを当日/全日表示するには、表示フォーム(DataGrid)を作成する必要があります。



画像



フォーム1はForm1.csクラスで生成されます。支払い注文を特殊な形式で保存するには、グローバル保存設定を作成する必要があります。保存設定は、settings.csクラスに生成されます。



画像



支払い注文を作成するには(2012年6月19日付けのロシア銀行規則の付録2に準拠したフォーム0401060 No. 383-P「資金移動の規則について」(2013年7月15日付けのロシア銀行の指示No. 3025-U、2014年4月29日付けのNo. 3248-U、2015年5月19日付けNo.3641-U、2015年11月6日付けNo.3844-U、2017年7月5日付けNo.4449-U、2018年10月11日付けNo.4930-U))特別なユーザーインターフェースと自動生成メカニズムを開発する必要がありますいくつかのフィールド。



フォーム番号0401060のユーザーインターフェイスを以下に示します。



画像



このフォームはシステムの主な機能であり、支払い注文を作成した後、その詳細をデータベースに転送し、PDFドキュメントを生成し、印刷して送信し、適切な形式(ed101、ed501、MT101)で保存できます。フォームはForm2.csクラスで生成され、pp.csクラスを使用してCreatePPクラスの新しいインスタンスを作成します。フィールド値は、getおよびsetアクセス修飾子を介して入力されます。各PPフィールドについて、対応する名前は、パブリックアクセス修飾子を使用したP1-P110と、プライベートアクセス修飾子を使用したp1-110変数です。



コードスニペットを以下に示します。



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;
}


画像



「create_pdf」関数を呼び出すと、フィールドが入力されたpdfドキュメントが生成されます。



画像



「create_pdf」関数では、フィールド値がフィールドを使用してパラメータとして渡されます。 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);


ほとんどのフィールドは自動化されており、ユーザー入力は必要ありません。



飲み物に費やされた金額は自動的に生成され(中央銀行の要件に従って)、支払人の銀行、支払人、受取人、受取人の銀行が引き上げられます。 TIN、KPPは、組織の名前で示されます。 BIK、コレスポンデントアカウントは銀行の名前で配置されます。



画像



フォーミングドキュメントED101



画像



フォーミングドキュメントED501



画像



生成されたメッセージをAWSCBD / AWP CBD SPFSを介して、ロシア連邦中央銀行の支払い回線に送信します。



ES 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-AWSKBRによって生成された元のメッセージ。

ResultCode-ステータスコード(000-成功、

001-失敗)、ResultText-ESステータス自体(TSによる受信、処理、実行に成功)。



開発へのリンクhttps://businessarchitecture.ru/test-spfs/



All Articles