Que pouvez-vous obtenir de 54-FZ personnellement, vous, nom d'utilisateur ou automatisation DIY de la comptabilité analytique

Depuis le 1er juillet 2017, l'utilisation des caisses enregistreuses (KKM), envoyant toutes leurs transactions directement au Service fédéral des impôts, est devenue obligatoire sur le territoire de la Fédération de Russie. Le box-office en ligne. L'introduction de cette innovation a déjà été discutée de tous les côtés, ou du moins de tous les côtés sérieux. Si la loi fédérale ne peut pas avoir des côtés trop sérieux, et quelle marge de créativité elle nous donne - plus à ce sujet sous la coupe.


Tous les KKM informent désormais le Federal Tax Service de nos transactions, et le Federal Tax Service, souhaitant garantir l'honnêteté de chaque caissier en ligne, a publié une application mobile spéciale ( Google Play , App Store ) qui permet à l'utilisateur de vérifier tout chèque qui lui est fourni et d'informer les autorités compétentes si le chèque a échoué.


Lorsque j'entends dire que quelqu'un commence à collecter de grandes quantités d'informations, je ne pense pas au profit potentiel de cela et non aux coûts de mise en œuvre. Et même pas ce que Big Brother regarde. Dans ma tête, des signes sont immédiatement dessinés qui peuvent être filtrés et joints, des cubes qui peuvent être tordus, des diagrammes qui peuvent être construits, etc. Pouvons-nous en quelque sorte nous en tenir au flux de nos propres données allant du vendeur à l'État? Nous le pouvons. (Sous la forme d'un petit arc, l'application FTS offre également la possibilité d'obtenir une version électronique de ce chèque lui-même.)

Quand j'ai découvert cette opportunité, j'ai pris feu. Un examen plus approfondi des capacités de l'application ne m'a pas déçu: une vérification peut être obtenue non seulement en html ou png, mais aussi en json.


Le fait est que j'essaie de garder une trace de toutes mes dépenses. J'essaie de le faire régulièrement, mais, bien sûr, il s'avère constamment que pendant plusieurs semaines, j'ai oublié de le faire. Et commence une séance d'hypnose éricksonienne avec immersion dans le passé et remplissage des taches blanches.

C'est de ce processus douloureux que le Service fédéral des impôts nous aidera à nous débarrasser.

Il s'avère, théoriquement, qu'au lieu d'analyser les relevés bancaires de plusieurs banques et un tas de chèques papier à la fin du mois (en essayant de comprendre où tout l'argent a de nouveau été fusionné, vous pouvez analyser la montagne de lettres dans la boîte json dans les pièces jointes. La perspective est également moyenne, mais contrairement à la première, elle se prête beaucoup mieux à l'automatisation.

Ainsi, lors d'un achat, nous pouvons recevoir notre chèque au format JSON par mail. De plus, en théorie, lors de l'achat pour cela, nous n'avons même pas besoin d'une application du Service fédéral des impôts: nous pouvons pré-générer une carte de visite avec le code qr de notre courrier dans l'application et la présenter au caissier au moment de l'achat. Ensuite, nous pouvons demander un chèque électronique au lieu d'un chèque papier, qui tombera immédiatement dans le courrier. Comme pour les achats en ligne.


Mais même le Federal Tax Service écrit directement sur cette fonction - "Ne vous flattez pas". Tous les KKM ne le supportent pas. Et même là où KKM le soutient, ce n'est pas du tout un fait qu'il est pris en charge par les caissiers eux-mêmes. Donc pour l'instant, c'est pour les forts d'esprit.

Après avoir reçu un chèque par la poste, il nous suffit d'automatiser son analyse et son déchargement dans un stockage pratique pour nous.

Vous devez choisir où décharger tout cela afin qu'il soit plus pratique de travailler avec.

Je ne sais pas comment vous allez, mais personnellement, en utilisant tel ou tel employé de l'État, par conséquent, j'exporte toujours les données d'eux pour analyse vers le bon vieil Excel. Quels que soient les graphiques et les diagrammes que les développeurs incluent à l'avance dans leur produit, ils ne pourront jamais prédire tout ce que je veux extraire des données. Quelles transactions considérer, lesquelles ignorer, comparer avec les phases de la lune, grouper, diviser par le nombre d'aujourd'hui ... Excel peut le faire.

De plus, si nous mettons notre Excel dans OneDrive, il sera parfaitement accessible via le Web, y compris depuis le système d'exploitation mobile. Et, contrairement à GoogleDrive, les formules fonctionneront parfaitement ici, y compris celles qui nous permettent d'organiser des listes déroulantes en cascade pour la catégorie et la sous-catégorie de chaque achat.


La petite chose est de traiter avec l'analyseur. Nous avons besoin d'un mécanisme qui reçoit une lettre avec une pièce jointe de la boîte aux lettres, analyse les pièces jointes json et écrit le résultat sur la tablette Excel qui se trouve dans OneDrive.

Dans un monde idéal, je vois cet analyseur comme quelque chose comme une étape pour IFTTT . Ensuite, notre solution vivrait complètement sur le réseau et ne nécessiterait rien de l'utilisateur (puisque nous parlons d'un monde idéal, les «cartes de visite» du Service fédéral des impôts y fonctionnent parfaitement).

Cependant, tout de suite pour comprendre comment une personne de la rue écrit sa démarche pour IFTTT - ainsi que pour comprendre si cela est possible du tout. J'ai échoué. Si quelqu'un peut suggérer un guide explicatif ou une plateforme alternative, je vous en serai très reconnaissant.

Étant donné que la solution réseau n'a pas bien fonctionné, nous implémentons un lien de l'analyseur sur le bureau. Chez NORBIT, j'implémente Dynamics CRM, donc la pile Microsoft est la plus familière pour moi. Oui, et nous avons déjà commencé à l'utiliser en choisissant Excel et OneDrive. Nous implémentons le plugin pour Outlook, où nous mettons toute la logique dont nous avons besoin.

Ici, j'ai pris le chemin de la moindre résistance.

Pour commencer, j'ai pris le JSON reçu du FTS et l' ai envoyé à json2csharp.com . Vous avez une structure de classe pour la désérialisation:

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

Vous devez maintenant recevoir une lettre, désérialiser la pièce jointe aux classes obtenues ci-dessus et les transformer en XLSX.

J'ai pris Newtonsoft.Json pour la désérialisation et ClosedXML pour l'écriture Excel. Par la suite, il s'est avéré qu'il était possible de ne pas se soucier d'écrire directement sur XLSX, mais d'écrire tranquillement en CSV - pour une raison quelconque, ClosedXML se bloque lorsque vous travaillez avec des fichiers qui ont des tableaux croisés dynamiques. Jusqu'à présent, les statistiques devaient donc être extraites dans un ex-fichier séparé et supprimer le déchargement du plug-in comme source de données.

Le plugin lui-même est très simple. Afin qu'il ne traite pas toutes les lettres entrantes, j'ai ouvert une boîte aux lettres séparée spécialement pour les chèques et vérifier que la lettre lui est parvenue. Ensuite, bien sûr, vous devez mettre cela dans les paramètres configurables, comme toutes les adresses de dossier.

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

Toutes les transformations de données de JSON en ligne de table ont été supprimées dans le constructeur TableRow.

Maintenant, après avoir effectué l'achat, il nous suffit de scanner le chèque, et toutes ses lignes elles-mêmes tomberont dans notre fichier situé dans le cloud. On peut voir ce dossier juste là, sans quitter la caisse. La visualisation est disponible sur tout système d'exploitation prenant en charge le travail des navigateurs modernes.

Il ne reste plus qu'à poser des catégories et des sous-catégories pour les lignes chargées et vous pouvez créer toutes les analyses qui plaisent à notre âme. Juste quelques lignes de code supplémentaires, et le plugin apprendra à mettre des catégories / sous-catégories pour les lignes, si le fichier a déjà une ligne avec la même description et la catégorie remplie plus tôt.


Voici un tel cycle de données dans la nature.

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


All Articles