Привет жителям Хабра.
В данной статье хотелось бы рассказать про API для получения чеков, которое нам не предоставила всеми любимая ФНС.
Когда только появились QR-коды на чеках я подумал «Вау, как круто! Ты сканируешь код и видишь если не всю инфу по чеку, то ссылку на него». И какого же было мое разочарование, когда просканировав такой код я увидел что-то вроде
t=20180518T220500&s=975.88&fn=8710000101125654&i=99456&fp=1250448795&n=1
Но расстраиваться я не стал и подумал, что ФНС позаботилась о нас и предоставила API для получения такой информации. Погуглив некоторое время я понял, что ФНС нам предоставила только мобильное приложение для проверки чека и просмотра той информации, что поступила к ним от магазина.
Но! Между магазином и налоговой имеется ещё одно звено — ОФД — те, кто обрабатывают информацию по чекам, полученную от магазинов, и отправляют в налоговую. Вот они то и предоставляют API для получения нужной нам информации. Не все. И не всегда бесплатно.
Судя по информации из википедии по состоянию на 1 марта 2018 зарегистрировано 17 ОФД. Допустим 10 из них предоставляют открытое и бесплатное API. Учитывая то, что мы не знаем с каким ОФД работает конкретный магазин, нужно будет пройтись по API 10 операторов фискальных данных. Далеко не лучший вариант.
Спустя какое-то время, я случайно наткнулся на приложение (не от ФНС), которое по QR-коду с чека получает информацию по чеку. Не будут же они «пробегать» по всем ОФД и собирать оттуда информацию — подумал я. Снова отправился в гугл и наткнулся на такой ответ.
Казалось, после этого ответа можно заканчивать импровизированное расследование, но у меня оставались ещё вопросы:
{"email":"some@mail.com","name":"SomeName","phone":"+79991234567"}
{
"email": "<адрес электронной почты, указанный при регистрации>",
"name": "<имя, указанное при регистрации>"
}
{"phone":"+79991234567"}
{"document": {"receipt": {
"operationType": 1,
"fiscalSign": 3522207165,
"dateTime": "2018-05-17T17:57:00",
"rawData": "AwAzAREEEAA4NzEwMDAwMTAwNTE4MzEzDQQUADAwMDExOTM1MTQwNDE0MDUgICAg+gMMADc4MjU3MDYwODYgIBAEBAAJ2gAA9AMEAGzC/Vo1BAYAMQTSDyLSDgQEABYBAAASBAQAogAAAB4EAQAB/AMCADwPPAQPAD0EAwCKrqQ+BAQARzYzNyMERQAGBCcAKjM0OTIyNzcgTkVTVC6MruAuTUFYSUIukZKQgJeAkoWLLjE0MKyrNwQCAJ8P/wMEAAZAQg8TBAIAnw9PBAIAbAH9Aw4AhK6ro+PopaKgIICtraAHBAIAPA85BAEAAE8EAgBsARgEDACAo+Cu4q7goyCOjo7xAyoANjIwMDE3LCCjLiCFqqDipeCoraHj4KMsIOOrLiCAp6itoCwgpC4gMTimHwQBAAE=",
"totalSum": 3900,
"nds10": 364,
"userInn": "7825706086",
"taxationType": 1,
"operator": "<Данные кассира>",
"fiscalDocumentNumber": 54812,
"properties": [ {
"value": "G637",
"key": "Код"
}],
"receiptCode": 3,
"requestNumber": 162,
"user": "Агроторг ООО",
"kktRegId": "0001193514041405",
"fiscalDriveNumber": "8710000100518392",
"items": [ {
"sum": 3999,
"price": 3999,
"name": "*3492277 NEST.Мор.MAXIB.СТРАЧАТЕЛ.140мл",
"quantity": 1,
"nds10": 364
}],
"ecashTotalSum": 0,
"retailPlaceAddress": "620017, г. Екатеринбург, ул. Азина, д. 18ж",
"cashTotalSum": 3900,
"shiftNumber": 278
}}}
{"document": {"receipt": {
"cashTotalSum": 0,
"fiscalSign": 1301551154,
"nds18": 4859,
"operationType": 1,
"userInn": "7728029110",
"dateTime": "2018-05-18T22:05:00",
"fiscalDocumentNumber": 12654,
"receiptCode": 3,
"ecashTotalSum": 97588,
"nds10": 5976,
"requestNumber": 395,
"retailPlaceAddress": "г.Екатеринбург, ул.Сулимова, д.50",
"fiscalDriveNumber": "871000010459859",
"taxationType": 1,
"user": "АО ТД Перекресток",
"operator": "<Данные кассира>",
"items": [
{
"sum": 3799,
"quantity": 1,
"price": 3799,
"name": "18074 Укроп пакет 100г",
"nds10": 345
},
{
"sum": 7490,
"quantity": 0.872,
"nds18": 1143,
"name": "2000339 Яблоки СЕЗОН.ПРЕДЛОЖЕНИЕ 1кг",
"price": 8590
}
],
"totalSum": 97588,
"rawData": "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",
"shiftNumber": 262,
"kktRegId": "0001248888049341"
}}}
Вы можете помочь и перевести немного средств на развитие сайта
Не исключено, что в дальнейшем чек, в котором присутствует тэг 1008 будет сверяться и при несовпадении — не отдаваться… То бишь нельзя будет посмотреть «чужие» чеки.
ФНС это надо? Для подтверждения одного из обоснований введения онлайн-касс они приложение запилили, что-то как-то работает, не думаю что в обозримом будущем будут какие-то изменения — на это просто не будет предусмотрен бюджет.
Типа «безопасность»)
С какой стати мол мой чек будет изучать Вася Пупкин, коль они не работники органов и ФМС…
Ну и это существенно может разгрузить сервера фнс — если не будет возможности массово «вытягивать» чеки — api потеряет привлекательность для сторонних сервисов
Внутри организации проверку чеков может проводить бухгалтерия, к примеру, или внутренний аудит/контроль.
Если речь о своих чеках — то для этого у них есть «X» и «Z» отчеты в ккм и само-собой доступ к админке ОФД
Я о чеках, предоставляемых сотрудниками в подтверждение расходов. Командировки, мелкие покупки и т.п.
Ну это тоже разовые, легальные действия. И вероятнее всего через web-морду сайта налоговой.
В маленькой компании это так. В большой логичнее было бы это автоматизировать — сканировать все чеки и проверять их с использованием API, чтобы было быстрее (сейчас проверка одного чека занимает несколько секунд) или чтобы не задерживать сотрудника (пока он сканирует чеки, система в фоне их проверяет).
Я к тому, что пока не очень понимаю, в каких еще сценариях этот API может пригодиться.
Ну как вариант сценария — навороченный документооборот большого предприятия, где сотрудник владивостокского филиала заполняет электронную форму отчета о командировке, сканируя туда чеки, система валидирует и калининградская головная компания принимает отчет к расходам…
Но как мне кажется тут подсуетятся те же ОФД или кто-то наподобии и за небольшую денежку будут предоставлять подобный сервис…
Окажись это такском и т.п. — они с фнс договорятся, а кто-то просто с улицы — увы и скорее всего получит палки в колеса…
Главное, чтобы 1С договорился ;)
Ну после этого уже будет «на всех торрентах» )
я работаю в компании федерального уровня, в тч с филиалами за границей и QR код наших бухгалтеров никак не интересует. им важно чтоб были соблюдены другие требования (например наличие печати на чеке/товарнике и тп), которые QR кодом никак не контролируется (но наличие которых требуется для правильной отчетности).
кроме чеков есть еще например бланки строгой отчетности, в которых нет никакого QR кода. поэтому QR код не может быть основой учета.
ну и в завершении добавлю что большие компании все расчеты в основном ведут по безналу, обычно на основании договора и в рамках заранее запланированного бюджета, поэтому чеков не будет настолько много что их потребуется автоматизировать.
Это один из вариантов. У меня есть клиенты платящие за распознавалку паспортов, ву, стс при потоке клиентов 3-5-10 в день.
Своего рода гики. Вот там иногда фанатзия по автоматизации бьет фонтаном (небесплодным).
не нашел в статье, о каком теге 1008 идет речь?
В статье про него нет. Это один из атрибутов «Формата Фискальных Данных» — этакого стандарта передаваемых данных от софта в ккм и из ккм в офд. Конкретно он звучит как «абонентский номер и (или) адрес электронной почты покупателя (клиента) в случае передачи ему кассового чека (БСО) в электронной форме ». Обычно если таковой тэг будет заполнен — от оператора фискальных данных прилетит на этот адрес/телефон «электронный чек».
Ну и собственно при наличии этих данных напрашивается та самая фильтрация «кому показывать чеки».
спасибо за объяснения, уверен, что данный тип «защиты» явно внедряться не будет, т.к. зависит от корректности заполнения данных со стороны продавца, а на текущий момент допускаются гораздо более существенные нарушения 54 ФЗ.
Если ФНС озаботиться закрытием доступа к API, я думаю они просто усложнят протокол, аутентификацию и т.д., чтобы было более сложно «эмулировать» приложение (а энтузиастов интересующихся этой проблемой не так много), но и это маловероятно, похоже, что они поставили приложение и бэкэнд «на паузу».
Озаботиться вопросом безопасности их может заставить только сильный резонанс в СМИ.
Собственно в 54ФЗ и тем более в его реализациях сырости — воз и маленькая тележка…
Притом фнс тут вообще не последняя инстанция. По идее они ведь просто переправляют к одному из офд (по данным чека), у каждого из которых может быть или не быть уникальный api
я считал, и до сих пор считаю, что ОФД высылают данные в ФНС, а не наоборот.
При обращении к апи фнс, полагаю данные напрямую из базы налоговой берутся.
Физически цепочка ккм->офд->налоговая
Но вот является ли она окончательным хранилищем или же все-таки ОФД выступают в виде «распределенной БД» — точно не скажу. То что мне попадалось в публикациях звучало именно в виде «налоговая перенаправляет на конкретного офд»
То есть для просмотра чека мне нужен не только номер чека, но электронная почта, телефон, прописка и справка от нарколога? Что-то сомневаюсь.
Тогда уж сразу разрешать покупки только после авторизации в госуслугах
Пока только номер фискального накопителя, регистрационный номер ККТ, ИНН, ФД и ФПД
И если что — это не я )
«номер фискального накопителя, регистрационный номер ККТ, ИНН, ФД и ФПД» — это cтруктурированный глобальный идентификатор документа, не более того.
Только последовательность правильнее ИНН-ККТ-ФП-ФД+ФПД
Тут сложно говорить о правильной последовательности. Разные ОФД идентифицируют чек по-разному:
1-ofd просит ФН, ФД, ФПД
ofd — ФН+Рег№ККТ+ИНН+ФД+ФПД
такском — ФПД+сумма
офд-я — Рег№ККТ+ФПД
На форуме разработчиков одного из ККМ на тему уникальности чека в рамках ккм/организации/глобально — вообще разброд и шатания )
> На форуме разработчиков одного из ККМ на тему уникальности чека в рамках ккм/организации/глобально — вообще разброд и шатания )
Ну вот как раз комплект ИНН-ККТ-ФП-ФД должен быть уникальным, по построению
Теоретически — да.
На практике — стоит ориентироваться на то, что в чеке в «уголках»:
дата-время, сумма, Рег№, ФН№, ФД№, ФПД
Серийник ккт + №ФН — неплохо уникализируют аппаратку, а ФПД — вообще хэш транзакции
buhexpert8.ru/wp-content/uploads/2017/12/image006-23.png
Вы таки хотите сказать, что «Рег№, ФН№, ФД№, ФПД» могут дублироваться с разными датой-временем?
Если кто-то решает идентифицировать по хешу — ну, это их проблемы. Наверное, они знают что делают, но я бы не стал. А вот добавить некое контрольное число в полноценный ID — это нормально.
Что такое «тэг 1008»?
Для проверки чека нужны Фискальный Номер, Фискальный документ, ФПД — подобрать эту комбинацию, как я понимаю, невозможно. Так что без чека проверить чужой чек — уже невозможно.
Кстати глянул в первые попавшиеся чеки, точнее что разные ОФД просят:
— такскому достаточно ФПД и суммы
— офд-я — рег номера ккм и фпд
— офд.ру — аж пать полей с чека
Не удивлюсь, если завтра это заблокируют или просто изменят формат ответа
сломав всех клиентов этого апи
Коих, судя по всему, не мало. Из популярных — различные сервисы кэшбека за товары из чеков.
Интересно — они такую же серую схему использования API применяют? И при том не заботятся имитацией официального приложения?
Т.е. хоть данные и обезличенные в целом — они передаются 3м лицам. Это просто замечательно.
Не понял, кого под третьими лицами имеете в виду?
В чеке ведь нет вашей фамилии, все, что вы можете узнать, даже если подберете номер — что кто-то в таком-то магазине в такое-то время что-то купил. Если вы в очередь встанете, вы и так сможете увидеть, что он покупает.
Нет проблем! Вы можете указать любой номер телефона, никакой проверки отправкой SMS магазины не делают.
Расход можно найти если сделать возврат товара (пробивается «возвратный» чек).
Получить «чужие» чеки из фнс практически невозможно, требуются поля, на основании которых вычисляется ФПД, по этим данным (номер чека, рег номер, дата-время, сумма + возможно, та самая n=1), до получения чека налоговой она и устанавливается валидность документа.
Некоторые ОФД требуют меньше данных для проверки и получения тела чека, вот это уже серьезней.
Не видел стандарта формата, но по собственной базе чеков находил очень интересные поля, такие как:
— частичный номер банковской карты которой выполнялась оплата
— флаг, что товар бонусный / акционный
и еще много других, но заполненных как попало (были и грубые нарушения — пустой НДС в позициях, но с данными на тотале/заголовке чека).
Насколько я понимаю: 4 последние цифры банковской карты — часто печатается на месте расчетов, но вот в тэгах для отправки — не встречал.
Бонусный, акционный и всяческие выигрыши в лотерею — пока частично и опционально, вот как ФФД1.1 будет принят — там пожестче.
Просто для представления: www.garant.ru/products/ipo/prime/doc/71540610
Если совсем коротко:
цена, количество, сумма, наименование + виды оплат (нал/электронные) — совсем обязательно, а аванс/задаток/итп, товар/услуга/тара, классификаторы — пока еще не совсем
n=1 — это код системы налогообложения, 1 это ОСН(Общая система налогообложения)
Вы не правы, выше ссылка на гарант, там описаны параметры, это действительно флаг покупки (получения денег продавцом), в чеках может быть ещё 3 (возврат).
Согласен. Почему-то повторил эту ошибку — засело в голове, что это СНО.
Не понимаю, зачем привязка к номеру телефона и еще email? Что мешает проверять чек без них?
Там не привязка, а «куда отправлять электронный чек». А привязка — это мое лишь предположение. Ну чисто исходя из злокозненности фискалов)
p/s/ хотя если посмотреть на методы регистрации/авторизации многих ресурсов — при утере доступа к e-mail — можно считать аккаунты там потеряными… ну и сложившиеся практики против ботов («то ли email то ли пароль неверны»)
Для получения полного содержимого чека? Это просто авторизация, апи то закрытое.
Проверить, что чек валиден, можно и без этого (но содержимое так не получить).
Еще как одна из функций — большой брат привязывает чеки к номеру телефона. В общую схему цифровизации и шпионажа государства / спец служб за гражданами отлично вписывается (единственное пока недостаток — гражданин сам должен зарегистрироваться и заливать чеки)
Да это пока и не надо. А вот более адекватные оценки вмененного дохода — это к бабке не ходить. Притом для большинства регионов окажется что «патенты» подорожают, так как фактические показатели дохода (на основе регистрации по чекам) окажутся заметно выше прошлых виртуальных оценок из которых вычислялась стоимость патента…
А расходы граждан — это надо внедрять систему подоходного налога наподобии американской: большая ставка и море понижающих условий — тогда у самих граждан будет стимул регистрировать свои расходы для вычетов.
Зря вас минусуют. В целом, вы правильно говорите, но не надо паранойи. Тут скорее всего удобство отслеживания государством или же банками на основе БигДата ваших предпочтений и предсказаний того, что и как у вас дальше будет. Банкам проще в случае безнала, так как они знают номер чека (он передаётся, что выяснили в другой статье), а настроив парсер, смогут забирать и другие данные, по которым будут выстраивать «модель клиента», на основании которого можно будет предлагать ему индивидуальные тарифы и услуги.
Являясь автором приложения для учета расходов под андроид, тоже реализовал у себя загрузку чеков с сервера ФНС. Исходники можно глянуть на гитхабе .
В целом согласен, что данный сервис не несет угроз безопасности, так как, по сути, выдает цифровую копию бумажного чека, который должен быть у вас уже на руках.
Вы не пробовали в своём приложении вытащить все чеки из ФНС? Это вообще возможно?
Насколько я понял, ФНС не предоставляет такой возможности. Даже их приложение этого не может.
Был не прав, их приложение это умеет. Мое пока нет.
В посте комментарий с ссылкой на чек натолкнул меня на мысли, что по некоторым реквизитам можно перебирать и получать чеки даже без авторизации на ОФД-порталах.
На 06.08.2017 из 12 ОФД публичный API для проверки кассовых чеков есть у 9 (отсюда):
Первый ОФД (Ашан, Виктория, Пятёрочка, BILLA, Магнит)
Платформа ОФД (Дикси, Крошка-картошка)
Такском (Карусель, KFC)
OFD.RU (Связной) — потребуется ручной ввод РН ККТ и ИНН с чека
ОФД-Я (Перекрёсток) — потребуется ручной ввод РН ККТ с чека (ИНН необязателен)
Астрал ОФДОФД ЯндексСБИСКОРУС ОФДДумаю, перебор и получение персональных данных чеков/клиентов всё же возможны, но нахожусь в Украине и не могу проверить это, так как попросту не имею чеков.
Не совсем понимаю опасения комментаторов выше про безопасность «кражи информации о чеках». Чеки не содержат персонализированную информацию(касающуюся покупателя) и самое страшное что там можно увидеть — это товар, им приобретенный.
Та в том-то и дело, что есть: пример. В чеке может быть указан e-mail или телефон покупателя.
А ещё можно номер карты увидеть, если оплата картой. А дальше — дело техники, особенно для банков.
Не, данных карты туда не летит. По крайней мере таких тэгов мне не попадалось ни в описании ФФД атрибутов ни в полях драйвера ккм
Не по теме, конечно, но интересно — есть ли у них защита от фрода при запросе нового пароля — восстановления? Если нет, то можно в своих целях использовать как бесплатное уведомление по смс о какой-либо ситуации (понятное дело, что будет приходить новый пароль, но это можно имитировать как триггер некоего события), при условии, что сам сервис проверки чеков не нужен.
sendToEmail=no — а не пробовали передать туда сам имейл? или массив имейлов (судя по ошибке может и такое быть)
Судя по ошибке «No enum match for...» там перечисление и yes, для этого перечисления как раз подходит. Почту попробовал туда ввести возвращает то же самое "[«No enum match for: some@mail.com»]".
Подозреваю, что оно у них просто не настроено и падает, тем более, что их приложение этим, вроде бы и не пользуется.
просто предположил, учитывая что вроде как есть функционал для отправки на имейл, если мне не изменяет память. Спасибо за ответ. Надо бы пакет для go по-быстрому себе накатать)))
В организации, в которой я работаю, за отправку чеков на почту (телефон) отвечает атол. Возможно ошибаюсь и за это отвечает ОФД, но я точно уверен, что это делает не ФНС.
Вполне возможно и так. Тем более учитывая апдейт к статье, что фнс не долго хранит инфу о чеке…