Хабрахабр

Используем 54 ФЗ на благо домашней бухгалтерии

Когда очередная редакция Федерального Закона номер 54 «О применении контрольно-кассовой техники» вступила в силу, большая часть населения встретила её негативно.

Примерно вот так (18+, содержит нецензурную лексику)

Я был одним из немногих, кто прыгал, хлопал в ладоши и вообще радовался как ребенок.
Ибо ведение бухгалтерии из отдельного бытового труда превратилось в элементарнейшее дело.

Зачем?

Здесь не будет ответа на вопрос «зачем нужна домашняя бухгалтерия». Если вы не знаете ответа, то она вам не нужна.

Классический пример про «ты увидишь, что чашечка кофе за 130 рублей каждый день сжирает в итоге 4000 в месяц» оторван от реальности. Также забудьте про экономию на основании анализа бухгалтерии. Если человек не идиот, он увидит это и без утомительного ведения бухгалтерии.

Основа

Начнём с простого. Софт для ведения бухучета.

Есть миллиард программ для домашнего бухучета.

Бухгалтерию ведем с 2014 года и за это время не сорвались (хотя рождения ребенка и стало серьезным соблазном) и не пожалели о выборе инструмента. Я поверхностно ознакомился с общими трендами и отказался от специализированного софта.
Высокий порог вхождения, ограниченная поддержка, отсутствие возможности расширять с одной стороны и избыточный функционал — с другой, сомнительные перспективы и срок жизни софта…
В итоге мы с женой остановились на Google Docs.

Выглядит все очень просто:
Три основных листа:
Категории — список категорий для валидации ввода
Текущий месяц — чтобы не теряться
Текущий год — скидываем сюда текущий месяц

Выглядит вот так (думаю, всё по скриншоту понятно):

Если ввести то, чего нет в списке — валидатор ругнется. Категории автоматически подставляются из соответствующего листа.

Примерного назначения категории вполне достаточно. Хотелось сделать тэги, но в итоге от этой идеи отказался — объективно тэгирование ничуть не проще, да и необходимости в этом обнаружено не было.

Вот так выглядит мой список категорий (он не идеальный, часть категорий дублируют друг друга, часть категорий являются подкатегориями других, но именно такой список сформировался за 4 года и покрывает наши семейные потребности по анализу расходов):

Лист: Категории

Сайт
Фрукты
Овощи
Специи
Бензин
Культурный отдых
Десерт
Продукты
Гигиена
Здоровье
Красота
Авто
Работа
Мясо
Спальня
Кухня
Техника
Подарки
Прихожая
Одежда_Обувь
Игры
Коммуналка
Хобби
Soft
Кошка
Рыба
Такси
Работа
Телефон
Техника
Посуда
Бытовая химия
Спорт
Канцелярия
Налоги
Мото
Сад
Интерьер
Безопасность
Кафе
Обслуживание и ремонт дома
Мебель
Секс
Путешествия
Покупка недвижимости
Дрифт
Рисование
Скульптура
Обучение
Готовая еда
Умный дом
Вело
Дети

Практика

В теории ведение бухгалтерии выглядит очень просто.

Пара пакетов молока, буханка хлеба, печеньки… Ну чего нам стоит после покупки придти домой и быстренько ввести список купленных товаров в документ?

Теория не учитывает поездки в супермаркеты, когда продукты покупаются сразу кучей…

И вот она — «горсть гвоздей»:

И ввод с объединением и подсчетом пунктов по категориям занимает продолжительное время. Один вид такой портянки дико демотивирует. Мы садились с женой вечерами и вместе вбивали все накопившиеся за неделю чеки.

Периодически возникало желание сделать распознавание текста чека, для упрощения ввода.
Но дальше мыслей дело не шло.

И в тот момент было очевидно, что время потраченное на написание ПО способного более менее качественно распознавать все чеки и сформировать на их основе хоть сколько нибудь пригодные данные — лет 10 будет перекрывать ручное вбивание чеков. Причина простая, как 5 копеек: написать софт требует времени.

В этот день вступила в действие «та самая» редакция 54 ФЗ.
«Вот оно!», подумаля я, «Можно брать данные из чека, не вбивая их вручную»… А потом мы продолжили вбивать чеки руками. Так было до 1 июля 2017 года. Потому что инерция, лень и консерватизм.

В феврале 2018 у меня родился сын… Это сильно поменяло приоритеты в делах.

Как итог — мы не находили времени, чтобы вести бухгалтерию.

Чеков накопилось огромное количество.

Ведрище гвоздей

И вот тут пришло понимание, что либо я делаю автоматизацию, либо все чеки надо выкидывать, потому что сил их вбивать руками просто нет.

Автоматизация

Пришло время поговорить о 54 ФЗ и о том, что он нам дает.

Если без умных слов — все кассы сливают чеки в интернет. Этот закон обязывает продавцов проводить чеки через ОФД (Оператора Фискальных Данных).

И к ним можно получить доступ.

Не знаю как сейчас, но когда я разбирался — информации о протоколе в интернете мне найти не удалось.

К счастью, ФНС выпустили своё приложение для мобильных телефонов, которое может скачивать чеки.

Дело за малым — берем снифер, ставим на телефон и смотрим что там шлет приложение для скачивания данных.

А шлёт оно вот что

GET запрос по адресу:
proverkacheka.nalog.ru:9999/v1/inns/*/kkts/*/fss//tickets/{FD}?fiscalSign={FPD}&sendToEmail=no
Заголовок содержит следующие обязательные поля:
«Authorization»: «Basic {BASE64(телефон: пароль)}»
Device-Id": "{Любая белиберда}"
«Device-OS»: «Android 5.1» — скорее всего тоже можно слать белиберду, не проверял.
«Version»: «2»
«ClientVersion»: «1.4.4.1»

Ответ в виде json, смысла приводить структуру не вижу, она простая и на практике её легко поймет тот, кому это будет актуально.

Ссылка на снифер

Я взял первый попавшийся в гугл плее. Ссылки на снифер не будет. Стоит помнить, что для перехвата https трафика приложение устанавливает свои сертификаты и вообще достаточно активно хозяйничает в телефоне. Сработало всё отлично, но рекомендовать не могу. Поэтому если надо — гуглите и используйте сами на свой страх и риск.
Никакой уверенности в том, что приложение не содержит зловредного кода у меня нет.

Как можно увидеть, протокол требует телефон и пароль для скачивания чека.
Регистрацию я делать не стал, благо можно легко зарегистрироваться через официальное приложение и потом использовать телефон и пароль для получения чеков.

Как я уже говорил выше — писать ПО для автоматизации имеет смысл только если затраты на написание перекрываются выигрышем от автоматизации.

Поэтому за код приложения мне немногосильно стыдно.

С другой стороны — приложение написано за несколько часов и прекрасно работает.

С помощью QZXing и веб камеры сканируем QR код, достаем из него ФП, ФД, ФПД и делаем запрос на содержимое чека.

Кстати, дорогая веб камера очень плохо работала в качестве сканера QR кода.

на сканирование одного кода тратилось несколько минут, что совершенно неприемлемо.
Однако, ради эксперимента решил попробовать использовать в качестве сканера дешевую китайскую вебку… И, о чудо, она без проблем сканирует QR коды с чеков! Я даже немного расстроился и уже хотел признать приложение непригодным для использования, т.к. Никак такого не ожидал… Полагаю дело в том, что у китайское вебки есть подсветка, бесполезная при обычном использовании, но неплохо работающая при близком просмотре чеков.

Приложение

Если вы вдруг дочитали досюда, вам вероятно интересно попробовать ПО для чтения чеков самостоятельно.

Категории хранятся в файле categories.txt

Вводим телефон и пароль, которые получили при регистрации в официальном приложении.
Вводим один раз, дальше оно сохраняется локально в настройках приложения.

Нажимаем Request Bill, выбираем источник видеопотока для сканирования чека и сканируем чек, либо вводим данные вручную и жмём Manual, чтобы использовать введенные данные.

Если на видеопотоке удастся распознать данные, окно автоматически закроется и отправится запрос на чек.

То, что мы уже вводили подставляется автоматически:

Заполняем поля: все, кроме гарантии — обязательные.

После чего жмём Generate Result и получаем данные в текстовом виде, пригодном для вставки в редактор таблиц, также этот текст помещается в буфер обмена.

Поэтому всё что мы уже вводили сохраняется.
Покупаете что-то второй раз — все поля товара будут уже заполнены. Автоматизация требует минимизации ввода данных.

Всё введенное сохраняется в файле items.csv

Исходники приложения висят на GitHub

Под мак тоже без проблем собирается, но это уже не ко мне. Там же в разделе releases можно забрать билд для линукса и винды.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть