اعتبارًا من 1 يوليو 2017 ، أصبح استخدام سجلات النقد (KKM) ، وإرسال جميع معاملاتها مباشرةً إلى دائرة الضرائب الفيدرالية ، إلزاميًا على أراضي الاتحاد الروسي. ما يسمى شباك التذاكر على الانترنت. تمت مناقشة مقدمة هذا الابتكار بالفعل من جميع الجهات ، أو على الأقل من جميع الجوانب الجادة. ما إذا كان القانون الفيدرالي لا يمكن أن يكون له جوانب خطيرة للغاية ، وما هو نطاق الإبداع الذي يمنحه لنا - فهذا أمر خاطئ.
تقوم جميع KKM الآن بإبلاغ مصلحة الضرائب الفيدرالية عن معاملاتنا ، وقد أصدرت مصلحة الضرائب الفيدرالية ، التي ترغب في ضمان صدق كل أمين الصندوق عبر الإنترنت ، تطبيقًا خاصًا للهاتف المحمول (
Google Play ،
متجر التطبيقات ) يسمح للمستخدم بالتحقق من أي شيك مقدم إليه وإبلاغ السلطات المختصة إذا كان التحقق فشلت.
عندما أسمع أن شخصًا ما يبدأ في جمع كميات كبيرة من المعلومات ، لا أفكر في الربح المحتمل من هذا وليس بشأن تكاليف التنفيذ. ولا حتى أن الأخ الأكبر يراقب. في رأسي ، يتم رسم العلامات فورًا التي يمكن ترشيحها وضمها ، والمكعبات التي يمكن أن تكون ملتوية ، والرسوم البيانية التي يمكن بناؤها ، إلخ. هل يمكننا التمسك بطريقة أو بأخرى بتدفق بياناتنا الخاصة من البائع إلى الدولة؟ نستطيع. (في شكل القوس الصغير ، يوفر تطبيق FTS أيضًا فرصة للحصول على نسخة إلكترونية من هذا الفحص نفسه.)
عندما علمت بهذه الفرصة ، اشتعلت فيها النيران. لم تخذلني نظرة فاحصة على قدرات التطبيق: يمكن الحصول على شيك ليس فقط بلغة html أو png ، ولكن أيضًا في json.
والحقيقة هي أنني أحاول أن تتبع كل ما عندي من النفقات. أحاول القيام بذلك بانتظام ، ولكن بالطبع ، اتضح باستمرار أنني نسيت ذلك لعدة أسابيع. وتبدأ جلسة التنويم المغناطيسي اريكسون مع الغمر في الماضي وملء البقع البيضاء.
من هذه العملية المؤلمة ستساعدنا دائرة الضرائب الفيدرالية في التخلص منها.
اتضح ، من الناحية النظرية ، أنه بدلاً من تحليل البيانات المصرفية من عدة بنوك وكومة من الشيكات الورقية في نهاية الشهر (في محاولة لفهم أين تم دمج كل الأموال مرة أخرى ، يمكنك تحليل جبل الرسائل في مربع json في المرفقات. الاحتمال كذلك ، ولكن على عكس الأول ، فإنه يفسح المجال للتشغيل الآلي.
لذلك ، عند إجراء عملية شراء ، يمكننا استلام الشيك بتنسيق JSON عن طريق البريد. علاوة على ذلك ، من الناحية النظرية ، عند الشراء لهذا ، نحن لسنا بحاجة حتى إلى طلب من دائرة الضرائب الفيدرالية: يمكننا إنشاء بطاقة عمل مسبقًا برمز qr لبريدنا في التطبيق وتقديمها إلى أمين الصندوق في وقت الشراء. بعد ذلك ، يمكننا طلب فحص إلكتروني بدلاً من فحص ورقي ، والذي يقع مباشرةً في البريد. كما هو الحال مع التسوق عبر الإنترنت.
لكن حتى دائرة الضرائب الفيدرالية تكتب مباشرة عن هذه الوظيفة - "لا تملق نفسك". ليس كل KKM يدعمها. وحتى في الأماكن التي تدعمها KKM ، فهي ليست مدعومة على الإطلاق من قبل الصرافين أنفسهم. حتى الآن هذا هو للقوي في الروح.
بعد تلقي فحص في البريد ، نحتاج فقط إلى أتمتة تحليله وتفريغه في مخزن مناسب لنا.
تحتاج إلى اختيار مكان تفريغ كل هذا حتى يكون من الملائم العمل به أكثر.
لا أعرف كيف أنت ، ولكن شخصياً ، استخدم هؤلاء أو هؤلاء الموظفون الرسميون ، كنتيجة لذلك ، أنا دائماً أصدّر البيانات منهم لتحليلها إلى Excel القديم الجيد. بغض النظر عن الرسوم البيانية والرسوم البيانية التي يدرجها مطورو البرامج في منتجاتهم مقدمًا ، فلن يتمكنوا أبدًا من التنبؤ بكل شيء أريد استخراجه من البيانات. المعاملات التي يجب مراعاتها ، والتي يجب تجاهلها ، مقارنةً بمراحل القمر ، المجموعة ، قسمة على رقم اليوم ... يمكن لـ Excel القيام بكل هذا.
علاوة على ذلك ، إذا وضعنا Excel في OneDrive ، فسيكون الوصول إليه مثاليًا عبر الويب ، بما في ذلك من خلال نظام التشغيل المحمول. وبخلاف GoogleDrive ، ستعمل الصيغ بشكل مثالي هنا ، بما في ذلك تلك التي تسمح لنا بتنظيم قوائم منسدلة متتالية للفئة والفئة الفرعية لكل عملية شراء.
الشيء الصغير هو التعامل مع المحلل اللغوي. نحتاج إلى آلية تستلم خطابًا مرفقًا به من صندوق البريد ، وتقوم بتوزيع مرفقات json وتكتب النتيجة على قرص Excel الموجود في OneDrive.
في عالم مثالي ، أرى أن هذا المحلل اللغوي يشبه خطوة
IFTTT . بعد ذلك ، سيعيش حلنا بشكل كامل على الشبكة ولا يتطلب أي شيء من المستخدم (نظرًا لأننا نتحدث عن عالم مثالي ، فإن "بطاقات العمل" الخاصة بالخدمة الضريبية الفيدرالية تعمل تمامًا فيها).
ومع ذلك ، على الفور فهم كيف يمكن لشخص من الشارع أن يكتب خطوته لـ IFTTT - وكذلك فهم ما إذا كان هذا ممكنًا على الإطلاق. لقد فشلت. إذا كان بإمكان شخص ما اقتراح دليل توضيحي أو منصة بديلة ، سأكون ممتنًا للغاية.
نظرًا لأن حل الشبكة لم يعمل جيدًا ، فإننا ننفذ رابطًا واحدًا للمحلل على سطح المكتب. في
NORBIT ، أقوم بتنفيذ Dynamics CRM ، لذلك فإن مكدس Microsoft هو الأكثر شيوعًا بالنسبة لي. نعم ، وقد بدأنا بالفعل في استخدامه باختيار Excel و OneDrive. نحن ننفذ البرنامج المساعد لبرنامج Outlook ، حيث نضع كل المنطق الذي نحتاجه.
هنا أخذت طريق الأقل مقاومة.
للبدء ، أخذت JSON المستلمة من FTS
وأطعمتها على
json2csharp.com . حصلت على هيكل الطبقة لإزالة التسلسل:
public class Item { public string name { get; set; } public int nds18 { get; set; } public int price { get; set; } public double quantity { get; set; } public int sum { get; set; } public int? nds10 { get; set; } } public class Receipt { public List<Item> items { get; set; } public string retailPlaceAddress { get; set; } public string userInn { get; set; } public int requestNumber { get; set; } public int nds18 { get; set; } public string fiscalDriveNumber { get; set; } public string user { get; set; } public string @operator { get; set; } public int fiscalDocumentNumber { get; set; } public int taxationType { get; set; } public int ecashTotalSum { get; set; } public string kktRegId { get; set; } public DateTime dateTime { get; set; } public int operationType { get; set; } public int cashTotalSum { get; set; } public int receiptCode { get; set; } public int nds10 { get; set; } public int totalSum { get; set; } public int shiftNumber { get; set; } public int fiscalSign { get; set; } }
أنت الآن بحاجة إلى تلقي خطاب ، وإلغاء تسلسل المرفق للفئات التي تم الحصول عليها أعلاه وتحويلها إلى XLSX.
أخذت Newtonsoft.Json لإزالة التسلسل ، و ClosedXML للكتابة التفوق. بعد ذلك ، اتضح أنه كان من الممكن عدم الإزعاج بالكتابة مباشرة إلى XLSX ، ولكن الكتابة بهدوء في CSV - لسبب ما ، تعطل ClosedXML عند العمل مع الملفات التي تحتوي على جداول محورية. لذلك كان لا بد من الحصول على الإحصاءات حتى الآن في ملف منفصل منفصل ، وإيقاف التحميل من المكون الإضافي كمصدر للبيانات.
البرنامج المساعد نفسه بسيط جدا. حتى لا يقوم بمعالجة جميع الرسائل الواردة ، قمت بفتح صندوق بريد منفصل خصيصًا لإجراء الفحوصات والتحقق من وصول الرسالة إليه. بعد ذلك ، بالطبع ، تحتاج إلى وضع هذا في الإعدادات القابلة للتكوين ، مثل جميع عناوين المجلدات.
void Items_ItemAdd(object Item) { Outlook.MailItem mail = (Outlook.MailItem)Item; if (Item != null) { if (mail.Attachments.Count == 1 & mail.To.Equals("my@mail.address")) { Outlook.Attachment attach = mail.Attachments[1]; string path = "C:\\_Data\\_tmp\\" + attach.FileName; attach.SaveAsFile(path); string text = System.IO.File.ReadAllText(path); System.IO.File.Delete(path); List<TableRow> objectList = GetBillsData(text); WriteBillsToXLSX(objectList); } } } private static void WriteBillsToXLSX(List<TableRow> objectList) { var workbook = new XLWorkbook(tablePath); var ws = workbook.Worksheet("Products"); int startrow = ws.LastRowUsed().RowNumber(); if (ws.CellsUsed().Count() != 0) startrow = ws.CellsUsed().Last().Address.RowNumber; foreach (var item in objectList) { startrow++; ws.Cell(startrow, 1).Value = item.dateTime; ws.Cell(startrow, 2).Value = item.sum; ws.Cell(startrow, 3).Value = item.quantity; ws.Cell(startrow, "J").Value = item.user; ws.Cell(startrow, "S").Value = item.name; } workbook.SaveAs(tablePath); } private static List<TableRow> GetBillsData(string bill) { Receipt doc = JsonConvert.DeserializeObject<Receipt>(bill); List<TableRow> objectList = new List<TableRow>(); foreach (var item in doc.items) { objectList.Add(new TableRow(item, doc)); } return objectList; }
تمت إزالة كل تحويل البيانات من JSON إلى صف الجدول إلى مُنشئ TableRow.
الآن ، وبعد إجراء عملية الشراء ، يكفي أن نقوم بفحص الشيك ، وسوف تقع جميع خطوطه في ملفنا في السحابة. يمكننا أن نرى هذا الملف هناك ، دون مغادرة مكتب النقد. العرض متاح لنا على أي نظام تشغيل يدعم عمل المتصفحات الحديثة.
يبقى فقط إخماد الفئات والفئات الفرعية للخطوط المحملة ويمكنك بناء أي تحليلات ترضي روحنا. فقط بضعة أسطر من التعليمات البرمجية ، وسوف يتعلم المكوّن الإضافي كيفية وضع فئات / فئات فرعية للخطوط ، إذا كان الملف يحتوي بالفعل على خط بنفس الوصف والفئة التي تم ملؤها مسبقًا.
هذه هي دورة البيانات في الطبيعة.