هذا هو أول مقال صغير لي عن تطوير صغير لبرنامج مالي ، من فضلك لا تحكم بدقة.
نظرًا لأن جميع الشركات المملوكة للدولة لم تنفذ تبادل الرسائل المالية من خلال نظام الرسائل المالية للبنك المركزي للاتحاد الروسي ، فقد أردت تفكيك وإنشاء نموذج أولي صغير بنفسي.
نظام المراسلة المالية لبنك روسيا (SPFS) هو قناة بديلة لإرسال الرسائل الإلكترونية المتعلقة بالمعاملات المالية. يضمن البرنامج الخاص للأمن الغذائي إرسال الرسائل المالية دون انقطاع داخل البلد.
مؤسسات الائتمان وعملائها - ترتبط الكيانات القانونية بالبرنامج الخاص للأمن الغذائي بمجرد أن تصبح جاهزة من الناحية الفنية ويتم إنشاء علاقات تعاقدية مع بنك روسيا. يتم تحديد الجوانب الإجرائية من خلال لائحة منفصلة لبنك روسيا.
لتطوير مخطط تفاعل الشبكة ، يجب أن تسترشد بالمستندات التالية:
- CBRF.61209-049301 "إرشادات أمن المعلومات" ؛
- CBRF.61209-049201 "محطة عمل آلية لعميل بنك روسيا. دليل المستخدم"؛
- CBRF.61209-049202 “محطة عمل آلية لعميل بنك روسيا. دليل المسؤول "؛
- VAMB.00106-019301 "SCAD" Signature الإصدار 5. "Signature-client" الإصدار 5. دليل مسؤول أمن المعلومات ".
لإرسال رسائل مالية إلى دائرة SPFS ، يوجد البرنامج AWK KBR / AWP KBR-N / AWP KBR SPFS.
AWP KBR / AWP KBR SPFS هو برنامج متخصص لموظفي البنوك أو المؤسسات الحكومية الكبيرة لإعداد وإرسال الرسائل المالية إلى دائرة الدفع في البنك المركزي. يتيح لك هذا البرنامج توقيع المستندات المالية إلكترونيًا وفحص وفك تشفير الرسائل الإلكترونية الواردة من بنك روسيا. يستخدم برنامج AWP KBR / AWP KBR SPFS في عمله تنسيق المستندات المالية UEFBS. أنواع الرسائل هي رسائل دفع وإعلامية (إنشاء رسالة اختبار ، وطلب معلومات فنية ، وما إلى ذلك).
للمعالجة ، يجب تحويل البريد الإلكتروني إلى UEFBS على AWS KBR أو تحويله إلى ABS الخاص بالعميل وإرساله إلى AWS KBR.
عند العمل في الوضع اليدوي ، يتم وضع رسائل البريد الإلكتروني في دليل AWS KBD c: // uarm3 / exg / cli. يحلل المكون المضمن "التحكم الوارد" ES الوارد. إذا نجحت الرسالة في اجتياز عملية التحقق من الصحة ، فإنها تنتقل إلى علامة التبويب "تم إدخالها" ، وإذا لم يتم التحقق من صحة الرسالة ، فإنها تنتقل إلى علامة التبويب "مرفوضة". عند العمل في الوضع التلقائي ، تنتقل الرسالة إلى مجلد الإخراج.
كجزء من التطوير ، تم تنفيذ الوظيفة التالية:
- إنشاء رسائل مالية بتنسيق UEFBS ED101 ؛
- إنشاء رسائل مالية بتنسيق UEFBS ED501 ؛
- إنشاء رسائل مالية بتنسيق SWIFT MT101 ؛
- تخزين الرسائل المالية في قاعدة بيانات MS SQL ؛
- تفريغ أوامر الدفع بصيغة pdf ؛
- معالجة الرسائل الواردة المستلمة ؛
لحفظ أوامر الدفع ، من الضروري تطوير قائمة تكوين (حدد خادمًا وقاعدة بيانات واسم مستخدم وكلمة مرور).
سأقوم بتعيين إعدادات اتصال قاعدة البيانات العالمية في ملف 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.
لإنشاء أمر دفع (نموذج 0401060 وفقًا للملحق 2 من لائحة بنك روسيا بتاريخ 19 يونيو 2012 رقم 383-P "بشأن قواعد تحويل الأموال" (بصيغته المعدلة بموجب تعليمات بنك روسيا بتاريخ 15 يوليو 2013 رقم 3025-U بتاريخ 29 أبريل 2014 رقم 3248-U ، بتاريخ 2015/05/19 برقم 3641-U ، بتاريخ 06.11.2015 رقم 3844-U ، بتاريخ 05.07.2017 رقم 4449-U بتاريخ 11.10.2018 رقم 4930-U)) من الضروري تطوير واجهة مستخدم خاصة وآلية للتوليد التلقائي بعض المجالات.
تظهر واجهة المستخدم للنموذج # 0401060 أدناه:
هذا النموذج هو الوظيفة الرئيسية للنظام ، بعد إنشاء أمر الدفع ، يمكن نقل تفاصيله إلى قاعدة البيانات ، وإنشاء مستند PDF ، وإرساله للطباعة ، وحفظه بالتنسيق المناسب (ed101 ، ed501 ، MT101). يتم إنشاء النموذج في فئة Form2.cs وباستخدام فئة pp.cs لإنشاء مثيل جديد لفئة CreatePP ، سيتم ملء قيم الحقل من خلال معدّل get and set access. لكل حقل 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
نرسل الرسالة التي تم إنشاؤها من خلال AWS CBD / 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 - الرسالة الأصلية التي تم إنشاؤها بواسطة AWS KBR ؛
ResultCode - رمز الحالة (000 - ناجح ، 001 - غير ناجح) ،
ResultText - حالة ES نفسها (تم استلامها بنجاح بواسطة TS ، ومعالجتها ، وتنفيذها).
رابط التطوير https://businessarchitecture.ru/test-spfs/ .