¬ŅQu√© puede obtener de 54-FZ personalmente, usted, nombre de usuario o automatizaci√≥n de bricolaje de contabilidad de costos?

A partir del 1 de julio de 2017, el uso de cajas registradoras (KKM), que envía todas sus transacciones directamente al Servicio de Impuestos Federales, se ha convertido en obligatorio en el territorio de la Federación Rusa. La llamada taquilla en línea. La introducción de esta innovación ya se ha discutido en todos los lados, o al menos en todos los lados serios. Si la ley federal puede tener lados no demasiado serios, y qué margen de creatividad nos brinda, esto está por debajo.


Todos los KKM ahora informan al Servicio de Impuestos Federales sobre nuestras transacciones, y el Servicio de Impuestos Federales, que quiere garantizar la honestidad de cada cajero en línea, ha lanzado una aplicación móvil especial ( Google Play , App Store ) que permite al usuario verificar cualquier cheque que se le haya proporcionado e informar a las autoridades competentes si el cheque fallido


Cuando escucho que alguien est√° comenzando a recopilar grandes cantidades de informaci√≥n, no pienso en el beneficio potencial de esto y no en los costos de implementaci√≥n. Y ni siquiera ese Gran Hermano est√° mirando. En mi cabeza, se dibujan inmediatamente signos que se pueden filtrar y unir, cubos que se pueden torcer, diagramas que se pueden construir, etc. ¬ŅPodemos de alguna manera apegarnos al flujo de nuestros propios datos que van del vendedor al estado? Nosotros podemos (En forma de una peque√Īa reverencia, la aplicaci√≥n FTS tambi√©n brinda la oportunidad de obtener una versi√≥n electr√≥nica de este cheque).

Cuando me enteré de esta oportunidad, me incendié. Un vistazo más de cerca a las capacidades de la aplicación no me decepcionó: se puede obtener un cheque no solo en html o png, sino también en json.


El hecho es que trato de hacer un seguimiento de todos mis gastos. Trato de hacerlo regularmente, pero, por supuesto, resulta que durante varias semanas olvidé hacerlo. Y comienza una sesión de hipnosis ericksoniana con inmersión en el pasado y rellenando los puntos blancos.

Es de este proceso doloroso que el Servicio de Impuestos Federales nos ayudará a deshacernos de él.

Resulta, te√≥ricamente, que en lugar de analizar extractos bancarios de varios bancos y un mont√≥n de recibos en papel al final del mes (o tratar de entender d√≥nde se ha ido todo el dinero nuevamente, puede analizar la monta√Īa de letras en el cuadro json en los archivos adjuntos. La perspectiva tambi√©n es regular, pero a diferencia del primero, se presta mucho mejor a la automatizaci√≥n.

Entonces, al realizar una compra, podemos recibir nuestro cheque en formato JSON por correo. Además, en teoría, al comprar para esto, ni siquiera necesitamos una solicitud del Servicio de Impuestos Federales: podemos generar previamente una tarjeta de negocios con el código qr de nuestro correo en la solicitud y presentarla al cajero al momento de la compra. Luego, podemos solicitar un cheque electrónico en lugar de un cheque en papel, que inmediatamente se enviará por correo. Al igual que con las compras en línea.


Pero incluso el Servicio de Impuestos Federales escribe directamente sobre esta función: "No te hagas ilusiones". No todos los KKM lo admiten. E incluso donde KKM lo admite, no es en absoluto un hecho que sea respaldado por los propios cajeros. Así que por ahora esto es para los fuertes en espíritu.

Después de recibir un cheque por correo, solo necesitamos automatizar su análisis y descarga en un almacenamiento conveniente para nosotros.

Debe elegir d√≥nde descargar todo esto para que sea conveniente trabajar con √©l a√ļn m√°s.

No s√© c√≥mo est√°s, pero personalmente, al usar estos o aquellos empleados estatales, como resultado, siempre exporto los datos de ellos para su an√°lisis al viejo Excel. No importa qu√© gr√°ficos y diagramas los desarrolladores incluyan en su producto de antemano, nunca podr√°n predecir todo lo que quiero extraer de los datos. Qu√© transacciones considerar, cu√°les ignorar, comparar con las fases de la luna, agrupar, dividir por el n√ļmero de hoy ... Excel puede hacer todo esto.

Además, si ponemos nuestro Excel en OneDrive, será perfectamente accesible a través de la web, incluso desde el sistema operativo móvil. Y, a diferencia de GoogleDrive, las fórmulas funcionarán perfectamente aquí, incluidas aquellas que nos permiten organizar listas desplegables en cascada para la categoría y subcategoría de cada compra.


Lo peque√Īo es tratar con el analizador. Necesitamos un mecanismo que reciba una carta con un archivo adjunto del buz√≥n, analice los archivos adjuntos json y escriba el resultado en la tableta Excel que se encuentra en OneDrive.

En un mundo ideal, veo este analizador como algo así como un paso para IFTTT . Entonces nuestra solución viviría completamente en la red y no requeriría nada del usuario (dado que estamos hablando de un mundo ideal, entonces las "tarjetas de visita" del Servicio de Impuestos Federales funcionan perfectamente en él).

Sin embargo, enseguida para entender cómo una persona de la calle debe escribir su paso para IFTTT, así como comprender si esto es posible. He fallado Si alguien puede sugerir una guía explicativa o una plataforma alternativa, estaré muy agradecido.

Como la solución de red no ha funcionado bien, estamos implementando un enlace del analizador en el escritorio. En NORBIT, estoy implementando Dynamics CRM, por lo que la pila de Microsoft es la más familiar para mí. Sí, y ya hemos comenzado a usarlo eligiendo Excel y OneDrive. Implementamos el complemento para Outlook, donde ponemos toda la lógica que necesitamos.

Aquí tomé el camino de menor resistencia.

Para comenzar, tomé el JSON recibido del FTS y lo envié a json2csharp.com . Obtuve una estructura de clase para la deserialización:

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

Ahora necesita recibir una carta, deserializar el archivo adjunto a las clases obtenidas anteriormente y convertirlas en XLSX.

Tomé Newtonsoft.Json para la deserialización y ClosedXML para la escritura de Excel. Posteriormente, resultó que era posible no molestarse en escribir directamente en XLSX, sino escribir en silencio en CSV; por alguna razón, ClosedXML se bloquea al trabajar con archivos que tienen tablas dinámicas. Por lo tanto, las estadísticas hasta el momento tuvieron que extraerse en un archivo ex separado y eliminar la descarga del complemento como fuente de datos.

El complemento en sí es muy simple. Para que no procese todas las cartas entrantes, he abierto un buzón separado específicamente para cheques y verifico que la carta le haya llegado. A continuación, por supuesto, debe poner esto en la configuración configurable, como todas las direcciones de carpeta.

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

Toda la transformación de datos de JSON a una fila de tabla se ha eliminado al constructor TableRow.

Ahora, después de realizar la compra, es suficiente para que escaneemos el cheque, y todas sus líneas caerán en nuestro archivo en la nube. Podemos ver este archivo allí mismo, sin salir de la caja. La visualización está disponible para nosotros en cualquier sistema operativo que admita el trabajo de los navegadores modernos.

Solo queda colocar categorías y subcategorías para las líneas cargadas y puede crear cualquier análisis que sea agradable para nuestra alma. Solo un par de líneas de código más, y el complemento aprenderá cómo poner categorías / subcategorías para líneas, si el archivo ya tiene una línea con la misma descripción y la categoría completada anteriormente.


Aquí hay tal ciclo de datos en la naturaleza.

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


All Articles