O que você pode obter do 54-FZ pessoalmente, você, nome de usuário ou automação DIY da contabilidade de custos

A partir de 1º de julho de 2017, o uso de caixas registradoras (KKM), enviando todas as suas transações diretamente para o Serviço Fiscal Federal, tornou-se obrigatório no território da Federação Russa. A chamada bilheteria online. A introdução dessa inovação já foi discutida por todos os lados, ou pelo menos por todos os lados sérios. Se a lei federal pode ter lados não muito sérios e que margem de criatividade ela oferece - isso está em jogo.


Agora, toda a KKM informa o Federal Tax Service sobre nossas transações, e o Federal Tax Service, que deseja garantir a honestidade de cada caixa on-line, lançou um aplicativo móvel especial ( Google Play , App Store ) que permite ao usuário verificar qualquer cheque fornecido a ele e informar as autoridades competentes se o cheque falhou.


Quando soube que alguém está começando a coletar grandes quantidades de informações, não penso no lucro potencial disso e nem nos custos de implementação. E nem mesmo o Big Brother está assistindo. Na minha cabeça, são imediatamente desenhados sinais que podem ser filtrados e unidos, cubos que podem ser torcidos, diagramas que podem ser construídos etc. De alguma forma, podemos manter o fluxo de nossos próprios dados que vão do vendedor para o estado? Nós podemos. (Na forma de um pequeno arco, o aplicativo FTS também oferece a oportunidade de obter uma versão eletrônica dessa verificação.)

Quando descobri esta oportunidade, peguei fogo. Um exame mais detalhado dos recursos do aplicativo não me decepcionou: uma verificação pode ser obtida não apenas em html ou png, mas também em json.


O fato é que tento acompanhar todas as minhas despesas. Eu tento fazer isso regularmente, mas, é claro, constantemente acontece que por várias semanas eu esqueci de fazê-lo. E começa uma sessão de hipnose ericksoniana com imersão no passado e preenchimento de manchas brancas.

É desse processo doloroso que o STF nos ajudará a nos livrar.

Acontece, teoricamente, que, em vez de analisar extratos bancários de vários bancos e um monte de recibos de papel no final do mês (ou tentar entender para onde todo o dinheiro foi novamente, é possível analisar a montanha de letras na caixa json nos anexos). A perspectiva também é tão positiva, mas, ao contrário da primeira, ela se presta muito melhor à automação.

Assim, ao fazer uma compra, podemos receber nosso cheque no formato JSON por correio. Além disso, em teoria, ao comprar isso, nem precisamos de um aplicativo do Federal Tax Service: podemos pré-gerar um cartão de visita com o código qr do nosso correio no aplicativo e apresentá-lo ao caixa no momento da compra. Em seguida, podemos solicitar um cheque eletrônico em vez de um cheque em papel, que cairá imediatamente no correio. Tal como acontece com as compras online.


Mas até o Serviço Fiscal Federal escreve diretamente sobre essa função - "Não se iluda". Nem todos os KKM suportam isso. E mesmo onde a KKM o apoia, não é fato que seja suportado pelos próprios caixas. Então, por enquanto, isso é para os fortes de espírito.

Depois de receber um cheque pelo correio, precisamos automatizar sua análise e descarregar em um armazenamento conveniente para nós.

Você precisa escolher onde descarregar tudo isso para que seja conveniente trabalhar ainda mais.

Não sei como você está, mas, pessoalmente, usando esses ou aqueles funcionários do estado, como resultado, sempre exporto os dados deles para análise para o bom e velho Excel. Independentemente de quais gráficos e diagramas os desenvolvedores incluam em seus produtos com antecedência, eles nunca podem prever tudo o que quero extrair dos dados. Quais transações considerar, quais ignorar, comparam com as fases da lua, agrupam, dividem pelo número de hoje ... O Excel pode fazer tudo isso.

Além disso, se colocarmos o Excel no OneDrive, ele estará perfeitamente acessível na Web, inclusive no sistema operacional móvel. E, diferentemente do GoogleDrive, as fórmulas funcionarão perfeitamente aqui, incluindo aquelas que nos permitem organizar listas suspensas em cascata para a categoria e subcategoria de cada compra.


O pequeno é lidar com o analisador. Precisamos de um mecanismo que receba uma carta com um anexo da caixa de correio, analise os anexos json e grave o resultado no tablet Excel que está no OneDrive.

Em um mundo ideal, vejo esse analisador como um passo para o IFTTT . Então, nossa solução viveria completamente na rede e não exigiria nada do usuário (já que estamos falando de um mundo ideal, os “cartões de visita” do Serviço Fiscal Federal funcionam perfeitamente nele).

No entanto, imediatamente compreenda como uma pessoa da rua deve escrever seu passo para o IFTTT - bem como entender se isso é possível. Eu falhei. Se alguém puder sugerir um guia explicativo ou uma plataforma alternativa, ficarei muito agradecido.

Como a solução de rede não funcionou bem, estamos implementando um link do analisador na área de trabalho. Na NORBIT, estou implementando o Dynamics CRM, portanto a pilha da Microsoft é a mais familiar para mim. Sim, e já começamos a usá-lo escolhendo o Excel e o OneDrive. Implementamos o plugin para Outlook, onde colocamos toda a lógica que precisamos.

Aqui eu segui o caminho de menor resistência.

Para começar, peguei o JSON recebido do STF e o alimentei em json2csharp.com . Tem uma estrutura de classes para desserialização:

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

Agora você precisa receber uma carta, desserialize o anexo das classes obtidas acima e transforme-as em XLSX.

Tomei Newtonsoft.Json para desserialização e ClosedXML para escrita em excel. Posteriormente, descobriu-se que era possível não se incomodar em escrever diretamente no XLSX, mas escrever discretamente em CSV - por algum motivo, o ClosedXML falha ao trabalhar com arquivos que possuem tabelas dinâmicas. Portanto, as estatísticas até agora tinham que ser retiradas em um ex-arquivo separado e eliminadas do descarregamento do plug-in como uma fonte de dados.

O plugin em si é muito simples. Para que ele não processe todas as cartas recebidas, abri uma caixa de correio separada especificamente para cheques e verifique se a carta chegou até ele. Em seguida, é claro, você precisa colocar isso nas configurações configuráveis, como em todos os endereços de pasta.

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

Todas as transformações de dados de JSON em uma linha da tabela foram removidas para o construtor TableRow.

Agora, depois de fazer a compra, basta escanear o cheque e todas as suas linhas caem em nosso arquivo na nuvem. Podemos ver esse arquivo ali mesmo, sem sair do caixa. A visualização está disponível para nós em qualquer sistema operacional que ofereça suporte ao trabalho de navegadores modernos.

Resta apenas estabelecer categorias e subcategorias para as linhas carregadas e você pode criar qualquer análise que agrade a nossa alma. Apenas mais algumas linhas de código, e o plug-in aprenderá a colocar categorias / subcategorias em linhas, se o arquivo já tiver uma linha com a mesma descrição e a categoria preenchida anteriormente.


Aqui está um ciclo de dados dessa natureza.

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


All Articles