Интеграция с cloudkassir.ru

Цель доработки (какую проблему решаем?)

Неизвестно

Предлагаемый нами вариант решения

Доработку делаем только для 11.7

  • Реализуем интеграцию с cloudkassir.ru для оформления фискальных чеков через этот сервис.
  • Доработки выполняем согласно документации CloudKassir.
  • Реализуем поддержку методов
    • Метод формирования кассового чека.
    • Метод формирования чека коррекции.
    • Метод получения статуса чека.
    • Метод получения детализации чека.
  • Дорабатываем кассовую часть программы, для корректной работы актуальных режимов через сервис cloudkassir:
    • Честный знак. Разрешительный режим
    • Честны знак. Разливное пиво
    • ЕГАИС
    • Несколько ФР
    • Несколько СНО
  • Адаптируем кассовую часть программы для корректной работы стандартных функций через сервис cloudkassir
    • Стараемся использовать существующие алгоритмы, которые уже реализованы для работы с FRServer.

Описание доработок для реализации предлагаемой схемы работы

Настройка интеграции

Настройки выполняются в карточке кассового аппарата, вкладка "CloudKassir":

image-1744636427880.png

  • Оформление чеков через CloudKassir (Да/Нет) - включает\отключает оформление чеков через CloudKassir
  • Рабочие места, которые могут работать с этой кассой
  • Юридическое лицо
    • В карточке юридического лица обязательно должны быть заданы ИНН и режим налогообложения
    • ИНН должен совпадать с ИНН юр. лица из ЛК CloudKassir
  • Public ID (значение из ЛК CloudKassir)
  • API Secret (значение из ЛК CloudKassir)

    image-1744635626314.png
  • При необходимости, можно задать имя и ИНН кассира
    • ИНН проходит валидацию на стороне CloudKassir, тестовый\неправильный ИНН приведет к ошибке "Некорректный документ".

Кассовый аппарат может быть настроен одновременно для работы через FRServer и CloudKassir. При такой настройке кассовые чеки будут оформляться через CloudKassir, а прочие операции (печать на обычные принтеры, работа с банковским терминалом и т.п.) будут выполняться через FRServer

В карточке холдинга должен быть задан email системного администратора, на него будут отправляться сообщения об ошибках. Если email системного администратора не будет задан, то сообщения будут отправляться на email техподдержки Юпитер

Добавляем новую процедуру "CloudKassir.Оформить кассовый чек"

  • Формирует JSON чек в формате CloudKassir
    • Если передан формальный параметр "Чек коррекции", то формируется JSON чека коррекции
    • Логику формирования JSON смотреть в таблице параметров кассового чека и в таблице параметров чека коррекции
  • Отправляет запрос на формирование кассового чека в CloudKassir. Получает и анализирует ответ.
  • Если CloudKassir отвечает ошибкой, то
    • Ошибка выводится на экран
    • Отправляется на почту системного администратора (вместе с лог-файлом)
    • Работа процедуры прерывается.
  • Если запрос прошел успешно, то сохраняет в заказ "ID чека в CloudKassir"
  • В заказ прописывается признак фискализации
  • Работа процедуры завершается.

Таблица параметров кассового чека

Параметр в CloudKassir Описание параметра в CloudKassir Значение в Юпитере
Inn* ИНН вашей организации или ИП, на который зарегистрирована касса ИНН из юридического лица, указанного в кассовом аппарате
Type* Признак расчета Определяется контекстом вызова. Income - Приход; IncomeReturn - Возврат прихода; Expense - Расход; ExpenseReturn - Возврат расхода.
InvoiceId Номер заказа в вашей системе Код заказа в Юпитере
AccountId Идентификатор пользователя в вашей системе Не передается
CustomerReceipt* Параметры формирования чека/состав чека  
Email E-mail покупателя для отправки чека Если для чека в параметре "Адрес покупателя для отправки в ФР" задан email, то используется он. Если нет, то Email из карточки клиента, указанного в заказе. Если нет, то пусто.
Phone Телефон покупателя в формате без скобок и дефисов для отправки ссылки на чек

Если для чека в параметре "Адрес покупателя для отправки в ФР" задан телефон, то используется он. Если нет, то Основной номер телефона из карточки клиента, указанного в заказе. Если нет, то пусто.

TaxationSystem* Система налогообложения Система налогообложения из чека (по товарным строкам), если нет то СНО из настроек торгового зала, если нет то СНО из юридического лица, указанного в кассовом аппарате.
CalculationPlace Покупатель, наименование организации или фамилия, имя, отчество (при наличии), серия и номер паспорта покупателя (клиента) Не передается
CustomerInn ИНН покупателя Не передается
isBso true, если чек является бланком строгой отчётности Всегда false
AgentSign Признак агента Не передается
CashierName Имя кассира Имя кассира из кассового аппарата, если нет то имя текущего сотрудника
CashierInn
ИНН кассира ИНН кассира из кассового аппарата, если нет то ИНН текущего сотрудника, если нет то пусто. ИНН проходит валидацию на стороне CloudKassir, тестовый\неправильный ИНН приведет к ошибке "Некорректный документ".
AdditionalReceiptInfos Дополнительная информация общая для чека, многострочная Не передается
AdditionalReceiptRequisite Дополнительный реквизит чека Не передается
CustomerBirthday Дата рождения покупателя (клиента) Не передается
CustomerStateCode Гражданство Не передается
CustomerDocType Код вида документа, удостоверяющего личность Не передается
CustomerDoc Данные документа, удостоверяющего личность Не передается
CustomerPlace Адрес покупателя (клиента) Не передается
CustomerStateCode Гражданство Не передается
Items* Параметры услуг/товарных позиций в чеке.  
Label* Наименование товара или услуги Из карточки ТМЦ, первое что задано: Наименование для чека, Наименование для счета, Наименование
Price* Цена за единицу товара/услуги Строка заказа, фактическая цена
Quantity* Количество Строка заказа, количество
Vat* Ставка НДС услуги/товара Ставка НДС из юридического лица, указанного в кассовом аппарате. Если в юр. лице нет, то из карточки ТМЦ.
Amount* Price * Quantity c учетом скидки Строка заказа, фактическая сумма
Method* Способ расчёта Из карточки ТМЦ. Если в карточке не задан, то всегда "4 FullPay, полный расчёт".
Object* Предмет расчёта Из карточки ТМЦ. Если в карточке не задан, то для Услуг всегда "4 Service, услуга". Если в подгруппе стоит признак "Подакцизный товар" и считан код маркировки, то "31 АТМ". Если в подгруппе стоит признак "Подакцизный товар" и код маркировки не считан, то "2 ExcisedCommodity, подакцизный товар". Если в подгруппе не стоит признак "Подакцизный товар" и считан код маркировки, то "33 ТМ". Если в подгруппе не стоит признак "Подакцизный товар" и код маркировки не считан, то "1 Commodity, товар".
MeasurementUnit Единица измерения Не передается
Excise Сумма акциза Не передается
CountryOriginCode Код страны происхождения товара Не передается
CustomsDeclarationNumber Регистрационный номер таможенной декларации Не передается
AgentSign Признак агента Не передается
AgentData Данные агента Не передается
PurveyorData Данные поставщика платежного агента Не передается
AdditionalPositionInfo Дополнительная информация внутри конкретной позиции чека Не передается
SaleObjectData Дополнительный реквизит предмета расчета Не передается
ProductCodeData Данные маркировки товара Не передается
MarkPartQuantity Дробное количество маркированного товара Не передается
RawMarkCode Код маркировки Считанный код маркировки. Символы GS заменяются на "\u001d"
GroupSeparator Разделитель GS Не передается
UnitCode* Мера количества предмета расчета Из карточки ТМЦ (кг, литры или штуки). Изделия разливного пива, всегда в литрах
additionalReceiptInfos Дополнительный реквизит пользователя, тег ОФД 1084 Не передается
OperationReceiptRequisite Операционный реквизит чека, тег ОФД 1270 Не передается
IndustryRequisiteCollection Отраслевой реквизит предмета расчета Заполняется если выполнена проверка в разрешительно режиме
code   Фиксированное значение "030"
documentDate   Фиксированное значение "21.11.2023"
documentNumber   Фиксированное значение "1994"
requisiteValue   Строка-результат проверки в разрешительном режиме
Amounts* Общая сумма платежа или возврата  
      cash* Сумма оплаты наличными Сумма оплат с типом фискальный 1. Без сдачи (сдача не поддерживается CloudKassir)
      Electronic* Сумма оплаты электронными деньгами Сумма оплат с типом фискальный 2
      AdvancePayment* Сумма из предоплаты (зачетом аванса) Сумма "Зачет аванса" по заказу
      Credit* Сумма постоплатой (в кредит) Всегда 0
      provision* Сумма оплаты встречным предоставлением (сертификаты, др. мат.ценности) Сумма оплат Фискальный 3 + Фискальный 4
UserRequisiteData Дополнительный реквизит пользователя Не передается

Таблица параметров чека коррекции

Параметр в CloudKassir Описание параметра в CloudKassir Значение в Юпитере
CorrectionReceiptData Состав чека  
OrganizationInn* ИНН организации ИНН из юридического лица, указанного в кассовом аппарате
VatRate Ставка НДС Не передается
TaxationSystem* Система налогообложения Система налогообложения из чека (по товарным строкам), если нет то СНО из настроек торгового зала, если нет то СНО из юридического лица, указанного в кассовом аппарате.
CorrectionReceiptType* Признак расчета коррекции Определяется контекстом вызова. 1 - Корректировка прихода; 2 - Возврат прихода; 3 - Корректировка расхода; 4 - Возврат расхода
CustomerInfo Покупатель, наименование организации или фамилия, имя, отчество (при наличии), серия и номер паспорта покупателя (клиента), тег ОФД 1227 Не передается
CustomerInn ИНН покупателя, тег ОФД 1228 Не передается
CustomerBirthday Дата рождения покупателя (клиента), тег ОФД 1243 (ффд 1.2) Не передается
CustomerStateCode Гражданство, тег ОФД 1244 (ффд 1.2) Не передается
CustomerDocType Код вида документа, удостоверяющего личность, тег ОФД 1245 (ффд 1.2) Не передается
CustomerDoc Данные документа, удостоверяющего личность, тег ОФД 1246 (ффд 1.2) Не передается
CustomerPlace Адрес покупателя (клиента), тег ОФД 1254 (ффд 1.2) Не передается
CustomerContactAddress Email или телефон покупателя, тег ОФД 1008 Если для чека в параметре "Адрес покупателя для отправки в ФР" задан email, то используется он. Если нет, то Email из карточки клиента, указанного в заказе. Если нет, то если для чека в параметре "Адрес покупателя для отправки в ФР" задан телефон, то используется он. Если нет, то Основной номер телефона из карточки клиента, указанного в заказе. Если нет, то пусто.
CashierName Имя кассира По аналогии с кассовым чеком
CashierInn
ИНН кассира По аналогии с кассовым чеком
PaymentPlace Место использования ККТ (сайт) Не передается
PaymentAddress Адрес использования ККТ Не передается
CorrectionType* Тип коррекции Определяется контекстом запуска. 0 - Самостоятельно, 1 - По предписанию
AdditionalReceiptRequisite Дополнительный реквизит чека (тег 1192) Не передается
CauseCorrection* Основание для коррекции  
CorrectionDate* Дата документа основания для коррекции Текущая дата
CorrectionNumber* Номер документа основания для коррекции Всегда пусто
Amounts* Общая сумма платежа или возврата По аналогии с кассовым чеком
Items* Содержимое позиций чека По аналогии с кассовым чеком
IndustryRequisites Отраслевой реквизит чека По аналогии с кассовым чеком
UserRequisiteData Дополнительный реквизит пользователя Не передается
OperationReceiptRequisite Операционный реквизит чека, тег ОФД 1270 Не передается

Добавляем новую процедуру "CloudKassir.Получить состояние кассового чека"

  • Принимает на вход "ID чека в CloudKassir"
  • Отправляет запрос Запрос статуса чека
  • Анализирует ответ
  • Если статус чека "Error" (Чек не пробился)
    • Ошибка выводится на экран. Текст ошибки из ответа CloudKassir
    • Ошибка отправляется на почту системного администратора (вместе с лог-файлом)
    • Работа процедуры завершается с ошибкой
  • Если статус чека "Queued", параметра "Warnings" нет (Чек в очереди)
    • Ошибка выводится на экран, "Кассовый чек еще не оформлен, находится в очереди CloudKassir"
    • Ошибка отправляется на почту системного администратора (вместе с лог-файлом)
    • Работа процедуры завершается с ошибкой
  • Если статус чека Queued и есть параметр "Warnings" (Чек в очереди, но не может быть пробит по указанной причине)
    • Ошибка выводится на экран, "Чек в очереди, но не может быть пробит по указанной причине: {текст причины из ответа CloudKassir}"
    • Ошибка отправляется на почту системного администратора (вместе с лог-файлом)
    • Работа процедуры завершается с ошибкой
  • Если статус чека "Processed" (Чек успешно обработался).
    • Отправляет запрос Получение данных чека
      • Если запрос прошел успешно,
        • Записывает в заказ параметры фискального чека (номер, ФПД, номер смены и т.п.)
        • Работа процедуры завершается
      • Если запрос прошел с ошибкой
        • Ошибка выводится на экран
        • Ошибка отправляется на почту системного администратора (вместе с лог-файлом)
        • Работа процедуры завершается с ошибкой

Изменяем работу процедуры "Печать всего заказа на фискальный принтер"

  • Отключить для CloudKassir
    • 404[66920815] "Печатать свой заголовок перед фискальным чеком"
    • 30867470[59249035] "Печатать скидки в подвале фискального чека"
    • 30867469[59245145] "Проверки, что можно распечатать чек"
  • Есть для заказа не определен СНО, то получать его из юридического лица из кассового аппарата
  • Проверять, что заданы обязательные параметры
    • Юридическое лицо в кассовом аппарате
    • ИНН у юридического лица
    • СНО для заказа
  • Вместо процедуры 249[59244613] "Печать чека через FRServer (рекурсия)" вызывать новую процедуру "CloudKassir.Оформить кассовый чек"

Изменяем работу процедуры "Провести оплаты, распечатать чек (до закрытия заказа)"

  • Если в заказ прописан "ID чека в CloudKassir" и не записаны параметры фискального чека, то вызывает процедуру "CloudKassir.Получить состояние кассового чека"
    • Если процедура "CloudKassir.Получить состояние кассового чека" завершается с ошибкой, то работа процедуры "Провести оплаты, распечатать чек (до закрытия заказа)" прерывается.

Изменяем работу процедуры "Закрыть текущий заказ"

  • До работы с ЕГАИС, что на этапе работы с ЕГАИС в заказ были записаны параметры фискального чека.
  • Если в заказ прописан "ID чека в CloudKassir" и не записаны параметры фискального чека, то вызывает процедуру "CloudKassir.Получить состояние кассового чека"
    • Если процедура "CloudKassir.Получить состояние кассового чека" завершается с ошибкой, то работа процедуры "Закрыть текущий заказ" прерывается.

Изменяем работу процедуры "Распровести все оплаты"

  • Если в заказ прописан "ID чека в CloudKassir" и не записаны параметры фискального чека, то вызывает процедуру "CloudKassir.Получить состояние кассового чека"
    • Если процедура "CloudKassir.Получить состояние кассового чека" завершается с ошибкой, то работа процедуры "Распровести все оплаты" прерывается.

Прочие изменения в логике работы программы/функционале

  • Отключить для CloudKassir
    • 30867470[178127181],  249[178126872] Проверка времени на ФР при открытии дня
    • 249[59703313] "Автоматическое закрытие\открытие рабочего дня и кассовой смены"
    • 249[59704835] "Получить и записать в текущее рабочее место версию FRServer"
    • 371[67698691] Меню функции. Функции кассового аппарата.
    • 249[64159880] "ФР.Закрыть смену"
    • 249[64159882] "ФР.Открыть смену"
    • 249[56557808] "ФР.Внесение"
    • 249[56557809] "ФР.Изъятие"
    • 249[66781542] "ФР.Распечатать файл"
    • 249[66781538] "ФР.Построчная печать файла"
    • 249[66781544] "ФР.Напечатать строки"
    • 249[66781543] "ФР.Отрезать чек"
    • 249[66781536] "ФР.Печать QR кода"
    • 249[66781532] "ФР.Открыть денежный ящик"
    • 249[66912658] "ФР.Отменить текущий чек"
    • 127[59703867] Пакетное оформление чеков коррекции
  • 1507360[66781968] "ФР.Определить фискальный регистратор и установить с ним связь". Искать не только Кассовый аппарат FRserver, но и CloudKassir
  • 30867469[59705721] "Найти и определить параметры ФР для этого текущего места". Искать не только Кассовый аппарат FRserver, но и CloudKassir
  • 117[178126900] Провести все оплаты, по наличную номера чека определяется тип фискального документа. Если в заказ прописан номер чека и заказ не фискализирован, то печатается чек коррекции.
    • Перед проведением оплат, запрашиваем параметры чека от CloudKassir. Если параметры не получены, то выдается ошибка и оплаты не проводятся.
  • Режим нескольких ФР
  • Режим "Совмещение систем налогообложения"
  • Работа с предоплатой
  • Работа с маркированными товарами (Честны знак)
    • Не проверялось
  • Работа с разрешительным режимом (Честный знак)
    • Не проверялось
  • Работа с разливным пивом
    • Не проверялось
  • ЕГАИС, DocsInBox
    • Не проверялось
    • 249[66650563] "Передать текущий заказ в ЕГАИС через УТМ"
      • 30867469[66651512] "Определяем фискальные параметры"
    • 249[176947695] "Передать чек продажи в ЕГАИС через DocsInBox}"
      • 30867469[176949947] "Получаем параметры с фискального регистратора"
    • Перед закрытием чека, до работы с ЕГАИС, запрашиваем параметры чека от CloudKassir. Если параметры не получены, то выдается ошибка и чек не закрывается. Таким образом, работа с ЕГАИС происходит только после успешного получения параметров чека. 471-14[2700-7301] 
  • 249[59572602] "Способ выдачи кассового чека"
    • Может использоваться, но если выбран вариант "Распечатать", то реквизиты для отправки чека будут определяться из карточки клиента

 

 

 

Время составления ТЗ: Неизвестно ч. 

Время работы программиста: Неизвестно ч. 

Время внедрения: Неизвестно ч. 

Время тестирования: Неизвестно ч.

Стоимость:  Неизвестно руб.


Система JUPITER                                 www.jupiter.systems                                 (с) 2024г.