Was können Sie von 54-FZ persönlich bekommen, Sie, Benutzername oder DIY-Automatisierung der Kostenrechnung

Ab dem 1. Juli 2017 ist die Verwendung von Registrierkassen (KKM), die alle ihre Transaktionen direkt an den Bundessteuerdienst senden, auf dem Gebiet der Russischen Föderation obligatorisch geworden. Die sogenannte Online-Abendkasse. Die Einführung dieser Innovation wurde bereits von allen Seiten oder zumindest von allen ernsthaften Seiten diskutiert. Ob das Bundesgesetz nicht zu ernsthafte Seiten haben kann und welchen Spielraum für Kreativität es uns gibt - das ist unter dem Strich.


Alle KKM informieren jetzt den Federal Tax Service über unsere Transaktionen, und der Federal Tax Service, der die Ehrlichkeit jedes Online-Kassierers sicherstellen möchte, hat eine spezielle mobile Anwendung ( Google Play , App Store ) veröffentlicht, mit der der Benutzer alle ihm zur Verfügung gestellten Schecks überprüfen und die zuständigen Behörden über den Scheck informieren kann fehlgeschlagen.


Wenn ich höre, dass jemand anfängt, große Mengen an Informationen zu sammeln, denke ich nicht an den potenziellen Gewinn davon und nicht an die Kosten der Implementierung. Und nicht einmal dieser große Bruder schaut zu. In meinem Kopf werden sofort Zeichen gezeichnet, die gefiltert und verbunden werden können, Würfel, die verdreht werden können, Diagramme, die erstellt werden können usw. Können wir uns irgendwie an den Fluss unserer eigenen Daten halten, die vom Verkäufer zum Staat gehen? Wir können. (In Form eines kleinen Bogens bietet die FTS-Anwendung auch die Möglichkeit, eine elektronische Version dieses Schecks selbst zu erhalten.)

Als ich von dieser Gelegenheit erfuhr, fing ich Feuer. Ein genauerer Blick auf die Funktionen der Anwendung hat mich nicht enttäuscht: Eine Überprüfung kann nicht nur in HTML oder PNG, sondern auch in JSON erfolgen.


Tatsache ist, dass ich versuche, alle meine Ausgaben im Auge zu behalten. Ich versuche es regelmäßig zu machen, aber es stellt sich natürlich ständig heraus, dass ich einige Wochen lang vergessen habe, es zu tun. Und beginnt eine Sitzung der Ericksonschen Hypnose mit dem Eintauchen in die Vergangenheit und dem Ausfüllen der weißen Flecken.

Aus diesem schmerzhaften Prozess wird uns der Bundessteuerdienst helfen, ihn loszuwerden.

Es stellt sich theoretisch heraus, dass Sie anstelle der Analyse von Kontoauszügen mehrerer Banken und eines Haufens von Schecks am Monatsende (um zu verstehen, wo das gesamte Geld wieder zusammengeführt wurde) den Berg von Briefen in der JSON-Box in den Anhängen analysieren können. Die Aussicht ist auch so lala, aber im Gegensatz zum ersten eignet es sich viel besser für die Automatisierung.

Wenn wir also einen Kauf tätigen, können wir unseren Scheck im JSON-Format per Post erhalten. Darüber hinaus benötigen wir theoretisch beim Kauf nicht einmal einen Antrag des Bundessteuerdienstes: Wir können eine Visitenkarte mit dem QR-Code unserer Post im Antrag vorab generieren und dem Kassierer zum Zeitpunkt des Kaufs vorlegen. Dann können wir einen elektronischen Scheck anstelle eines Papierschecks anfordern, der sofort in die Post fällt. Wie beim Online-Shopping.


Aber auch der Bundessteuerdienst schreibt direkt über diese Funktion: "Schmeicheln Sie sich nicht." Nicht alle KKM unterstützen dies. Und selbst wenn KKM dies unterstützt, ist es keineswegs eine Tatsache, dass es von den Kassierern selbst unterstützt wird. Im Moment ist dies also für die Starken im Geist.

Nachdem wir einen Scheck per E-Mail erhalten haben, müssen wir nur die Analyse und das Entladen in einem für uns geeigneten Speicher automatisieren.

Sie müssen auswählen, wo all dies entladen werden soll, damit Sie bequem weiter damit arbeiten können.

Ich weiß nicht, wie es Ihnen geht, aber wenn ich diese oder jene Staatsangestellten persönlich benutze, exportiere ich die Daten immer zur Analyse in das gute alte Excel. Unabhängig davon, welche Grafiken und Diagramme Entwickler im Voraus in ihr Produkt aufnehmen, können sie niemals alles vorhersagen, was ich aus den Daten extrahieren möchte. Welche Transaktionen zu berücksichtigen sind, welche zu ignorieren sind, mit den Mondphasen zu vergleichen, zu gruppieren, durch die heutige Zahl zu teilen ... Excel kann all dies tun.

Wenn wir unser Excel in OneDrive einfügen, ist es außerdem perfekt über das Web zugänglich, auch vom mobilen Betriebssystem aus. Und im Gegensatz zu GoogleDrive funktionieren Formeln hier perfekt, einschließlich solcher, mit denen wir kaskadierende Dropdown-Listen für die Kategorie und Unterkategorie jedes Kaufs organisieren können.


Die kleine Sache ist, sich mit dem Parser zu befassen. Wir benötigen einen Mechanismus, der einen Brief mit einem Anhang aus dem Postfach empfängt, die JSON-Anhänge analysiert und das Ergebnis auf das Excel-Tablet in OneDrive schreibt.

In einer idealen Welt sehe ich diesen Parser als einen Schritt für IFTTT . Dann würde unsere Lösung vollständig im Netzwerk leben und nichts vom Benutzer verlangen (da es sich um eine ideale Welt handelt, funktionieren die „Visitenkarten“ des Bundessteuerdienstes perfekt darin).

Jedoch sofort zu verstehen, wie eine Person von der Straße ihren Schritt für IFTTT schreibt - sowie zu verstehen, ob dies überhaupt möglich ist. Ich habe versagt Wenn jemand einen erklärenden Leitfaden oder eine alternative Plattform vorschlagen kann, bin ich sehr dankbar.

Da die Netzwerklösung nicht gut funktioniert hat, implementieren wir einen Link des Parsers auf dem Desktop. Bei NORBIT implementiere ich Dynamics CRM, daher ist mir der Microsoft-Stack am vertrautesten. Ja, und wir haben bereits damit begonnen, Excel und OneDrive zu verwenden. Wir implementieren das Plugin für Outlook, in dem wir die gesamte Logik platzieren, die wir benötigen.

Hier bin ich den Weg des geringsten Widerstands gegangen.

Zu Beginn habe ich den vom FTS erhaltenen JSON genommen und an json2csharp.com weitergeleitet . Ich habe eine Klassenstruktur für die Deserialisierung:

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

Jetzt müssen Sie einen Brief erhalten, den Anhang zu den oben erhaltenen Klassen deserialisieren und sie in XLSX umwandeln.

Ich nahm Newtonsoft.Json für die Deserialisierung und ClosedXML für das Excel-Schreiben. In der Folge stellte sich heraus, dass es nicht möglich war, direkt in XLSX zu schreiben, sondern leise in CSV zu schreiben. Aus irgendeinem Grund stürzt ClosedXML ab, wenn mit Dateien mit Pivot-Tabellen gearbeitet wird. Daher mussten die bisherigen Statistiken in einer separaten Ex-Datei erstellt und das Entladen aus dem Plug-In als Datenquelle abgeschaltet werden.

Das Plugin selbst ist sehr einfach. Damit er nicht alle eingehenden Briefe verarbeitet, habe ich ein separates Postfach speziell für Schecks geöffnet und überprüft, ob der Brief bei ihm eingegangen ist. Als nächstes müssen Sie dies natürlich wie alle Ordneradressen in die konfigurierbaren Einstellungen einfügen.

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

Die gesamte Datentransformation von JSON in eine Tabellenzeile wurde in den TableRow-Konstruktor entfernt.

Nach dem Kauf reicht es aus, den Scheck zu scannen, und alle Zeilen selbst fallen in unsere Datei, die in der Cloud liegt. Wir können diese Datei genau dort sehen, ohne die Kasse zu verlassen. Die Anzeige steht uns auf jedem Betriebssystem zur Verfügung, das die Arbeit moderner Browser unterstützt.

Es müssen nur noch Kategorien und Unterkategorien für die geladenen Zeilen festgelegt werden, und Sie können alle Analysen erstellen, die unserer Seele gefallen. Nur noch ein paar Codezeilen, und das Plugin lernt, wie Kategorien / Unterkategorien für Zeilen eingefügt werden, wenn die Datei bereits eine Zeile mit derselben Beschreibung und der zuvor ausgefüllten Kategorie enthält.


Hier ist ein solcher Datenzyklus in der Natur.

Source: https://habr.com/ru/post/de445182/


All Articles