Taxer — это автоматизированный бухгалтер. На данный момент системой пользуются сотни тысяч Украинских предпринимателей. Это онлайн платформа, в которой Вы можете быстро и безопасно сдавать налоговую отчётность прямо в налоговую через интернет используя свою электронно-цифровую подпись. Интересный факт. Основатель нашей организации systems.ingello ранее работал в компании Таксер на позиции технического директора и принимал активное участие в разработке данного сервиса. В этой статье будет рассказано о некоторых публично-известных деталях автоматизации такого рода. Конечно, мы не будем затрагивать информацию, которая является корпоративно-ценной для таксера.

https://taxer.ua

Если Вы сталкивались с автоматизацией в сфере государственных и административных структур — Вы знаете, какой это ад. Если не сталкивались — тогда, возможно, Вам приходилось работать с бухгалтерией и сдавать налоговые отчёты “вручную” — через эти бумажные формы и отделения ДФСУ. Так вот. Автоматизировать сдачу налоговой отчётности — в сотни раз труднее.

Дело в том, что API (или, точнее сказать, налоговые государственные шлюзы) работали и работают не достаточно стабильно. Правила часто меняются, иногда отчёты не принимаются и на это не даётся отчётливое описание причины. Программисты на стороне государства могут выкатывать нове версии, не достоверно протестировав результат или не внеся это в соответствующую докумнентацию. Та документация, которая имеется — это отдельная и тоже сложная история.

Сама система принятия налоговой отчётности — это многоэтапный процесс. Он включает в себя полностью автоматическую проверку, полу-автоматическую и проверку налоговым инспектором лично. Все эти этапы полны потенциальных ошибок с обеих сторон.

Конечно, самый тяжелый этап — это автоматический режим. Сам отчётный документ — это достаточно сложный объект из множества свойств. Некоторые документы состоят из композита под-документов, состоящих из десятков блоков, каждый из которых состоит из форм-опросов. И таких документов даже самый обыкновенный предприниматель сдаёт несколько.

Чтобы сдать документ — он должен пройти достаточно сложную автоматическую проверку — валидацию. Сам документ представляет собой XML объект. А валидация представляет собой XSD валидатор. Это тоже сложный вложенный XML объект, который декларирует правила, по которым отчёт будет проходить проверку. Некоторые правила декларативны. А некоторые описываются специальными регулярными выражениями. Некоторые правила выдают достаточно чёткие и понятные ошибки при описании. Некоторые — косвенные ответы, которые требуют вручную заходить в документ и анализировать ошибку.

Каждые изменения - как на стороне автоматизированной системы, так и на стороне налоговых шлюзов — влекут за собой необходимость вносить изменения, которые требуют внимательности и аналитики. Для того, чтобы системой пользовались сотни тысяч пользователей — она должна быть максимально-устойчива к такого рода изменениям и это являет собой дополнительные требования к архитектуре системы и стандартам программирования.

Форм налоговой отчётности достаточно много. И это само по себе большая проблема. В каждой форме, помимо выше-описанной валидации, зашита некоторая математика. Если по простому — Вы можете брать такие формы и заполнять их онлайн или вручную (на бумаге). Если Вы таким занимались — то заметили, что есть множество правил, а множество операций — это настоящая рутина, группа однотипных действий. Также Вы могли заметить, что почти всю эту рутину можно сократить, т.к. все эти правила могут выполняться автоматически, необходимо только знать некоторые базовые цифры для расчёта и данные о предприятии. Данные о предприятии или предпринимателе редко меняются. Цифры меняются каждый учетный цикл. Но их не много. Вся суть платной версии онлайн-сервиса Таксер в том, что система снимает с Вас эту головную боль. Вы разово вводите данные о предприятии, а потом просто обновляете цифры (Ваши доходы\расходы\сотрудники и т.п.). Остальное Taxer сделает за Вас.

Технически это достигается воссозданием математики каждой из форм. И тут также есть большое пространство для инженерной мысли. Формы разные, но имеют множество общих знаменателей. И чем успешнее программист сможет создать полиморфную форму, которая инкапсулирует некоторые общие функции форм, чем успешнее программист сможет обобщить общую математику, вынося её за пределы конкретной формы и сокращая дублирование — тем меньше будет рутинной работы в отделе разработки и тем больше отдел разработки сможет сделать новых полезных функций для развития сервиса. Само собой, есть множество интересных технических нюансов, но мы не можем осветить их в данной статье.


Важно упомянуть о безопасности. Подсистема обмена документов в таксере во многом схожа с другими гос системами электронной подписи. Кстати, такими-же пользуются суды и частные банки. К таким подсистемам есть достаточно жестокие требования по шифрованию и безопасности как таковой. Первая проблема, с которой Вы столкнётесь, если разрабатываете онлайн-сервис с ЭЦП — это то, что Вы юридически не имеете право получать электронно цифровую подпись Вашего клиента через браузер и обрабатывать её на сервере. Это не законно. Потому различные сервисы придумывают более безопасные пути обработки. Кто-то делает сертифицированное браузерное приложение. Кто-то предлагает скачать специальное программное обеспечение. Задача проста — ЭЦП должно загрузиться и расшифроваться по специальному алгоритму НА КОМПЬЮТЕРЕ КЛИЕНТА. Например, Таксер использовал схему с Java апплетом. Проблемная сторона этого решения в том, что пользователь должен предварительно установить виртуальную машину Java на свой компьютер. И в этом процессе есть нюансы для разных операционных систем. Потому приходится создавать видео-инструкции по установке, ведь даже продвинутый пользователь тут может столкнуться с различными непонятками типа версионирования или переменных окружения.

После того как всё успешно установлено — процесс проще некуда. Вы просто открываете этот апплет, разработанный в таксере. Этот апплет по специальному алгоритму расшифрует данные Вашей ЭЦП. И синхронизируется с сервером таксер через специальный Gateway который разработан с помощью Node JS и устанавливает непрерывное (сокетное) соединение с Java апплетом. Это работает моментально, без всяких обновлений страниц, отправок форм и тому подобных неприятностей.

Конечно, это далеко не всё. Таксер — это сложнейший продукт с большой историей и множеством особенностей как архитектуры, так и инфраструктуры. Сервис постоянно развивается, добавляются новые функции а старые становятся лучше и удобнее. Всё это достигается сочетанием борьбы с гетерогенностью, высокой сложностью с помощью своевременной инженерной мысли. И конечно это годы непосильного труда различных специалистов — юристов, дизайнеров, программистов, архитекторов, системных администраторов и специалистов технической поддержки.


Если Вам нужно разработать сложный проект - запишитесь к нам на консультацию, у нас есть большой опыт в управлении и разработке. И мы занимаемся исключительно сложными системами много лет.

Ссылка на презентацию нашей компании - чуть ниже.

Развивай навык, формализуй опыт, создавай продукт, автоматизируй труд