Git Product home page Git Product logo

anthonyaxenov / atol-online Goto Github PK

View Code? Open in Web Editor NEW
4.0 1.0 2.0 456 KB

Библиотека для работы с АТОЛ Онлайн (облачная ККТ для приёма платежей по 54-ФЗ). Доп. зеркало: http://git.anthonyaxenov.ru/anthony/atol-online/

Home Page: https://packagist.org/packages/axenov/atol-online

License: MIT License

PHP 100.00%
54-fz atol atol-online atol-api atol-online-api receipts composer php

atol-online's Introduction

АТОЛ Онлайн

Библиотека для фискализации чеков по 54-ФЗ через облачные ККТ АТОЛ.

GitHub Workflow Status (master) codecov Stable Version Packagist PHP Version Support License buymeacoffee

Документация

Текущие поддерживаемые версии АТОЛ Онлайн:

Протокол API ФФД Статус
v4 5.10 1.05 Поддерживается
v5 3.0 1.2 В планах

Поддерживаемые возможности:

  • Мониторинг ККТ и ФН
  • Фискализация документов на облачной ККТ
  • Валидация данных до отправки документа на ККТ (насколько это возможно, согласно схеме)
  • Расчёты денег в копейках
  • PSR-4 автозагрузка, покрытие настоящими тестами, fluent-setters, докблоки

Системные требования

  • php v8.1 и выше
  • php-json
  • php-mbstring
  • composer

Для использования на php8.0 используйте версии библиотеки до 1.0.2 включительно.

Начало работы

Подключение библиотеки

  1. Подключить пакет к проекту:
    composer require axenov/atol-online
  2. В нужном месте проекта подключить автозагрузчик composer-зависимостей, если это не сделано ранее:
    require($project_root . '/vendor/autoload.php');
    где $project_root — абсолютный путь к корневой директории вашего проекта.

    При использовании фреймворков это обычно не требуется.

Использование библиотеки

Вы имеете право использовать и распространять код на условиях лицензии MIT.

Дополнительная информация может быть найдена здесь:

  1. Документации к библиотеке
  2. Документация АТОЛ Онлайн
  3. Исходный код, докблоки
  4. Тесты

Тестирование кода библиотеки

Файлы тестов находятся в директории /tests корня репозитория.

Для запуска тестов необходимо перейти в корень репозитория и выполнить одну из команд:

composer psalm    # статический анализ
composer phpcs    # синтаксический анализ
composer test     # полное тестирование без покрытия
composer coverage # полное тестирование с покрытием

После тестирования с покрытием в корне репозитория создаётся отчёт, который сохраняется в директории .coverage. Для тестирования с покрытием необходим php-xdebug с параметром xdebug.mode = coverage,....

atol-online's People

Contributors

anthonyaxenov avatar nsayapin avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

atol-online's Issues

Сомнительный метод AtolOnline\Entities\Document::fromRaw()

В версии 0.* есть функционал декодирования json-стркои в объект класса AtolOnline\Entities\Document. За это отвечает метод AtolOnline\Entities\Document::fromRaw().

Он было написан для одного конкретного проекта, где на тот момент уже использовалась библиотека, и использовать этот fromRaw() там было удобно.

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

Поэтому этот метод -- кандидат на удаление, пока не будет ясно обратное.

Неправильно считается НДС

Добрый день.

Неправильно считается НДС20, да и с остальными проблема по идее.
Класс Vat:

switch ($type) {
            case VatTypes::NONE:
            case VatTypes::VAT0:
                return 0;
            case VatTypes::VAT10:
                //return $kopeks * 10 / 100;
            case VatTypes::VAT110:
                return $kopeks * 10 / 110;
            case VatTypes::VAT18:
                //return $kopeks * 18 / 100;
            case VatTypes::VAT118:
                return $kopeks * 18 / 118;
            case VatTypes::VAT20:
---->>>     //return $kopeks * 20 / 100;
            case VatTypes::VAT120:
                return $kopeks * 20 / 120;
        }
        return 0;

Себе поправил, но после этого заметил - неправильно происходит округление налога при подсчете:
Вывод $doc->jsonSerialize(); перед отправкой.

    array(8) {
      ["name"]=>
      string(52) "Тест"
      ["price"]=>
      float(252.43)
      ["quantity"]=>
      float(1)
      ["sum"]=>
      float(252.43)
      ["measurement_unit"]=>
      string(4) "шт"
      ["payment_method"]=>
      string(12) "full_payment"
      ["payment_object"]=>
      string(7) "service"
      ["vat"]=>
      array(2) {
        ["type"]=>
        string(5) "vat20"
        ["sum"]=>
        float(50.48)
      }
    }

Хотя по правилам должно быть 252.43 * 20 / 100 = 50.486 (50.49)

Требуется актуализация до схемы v5.7

Актуальная версия v5.6: https://online.atol.ru/files/API_atol_online_v4.pdf

5.2: из чека коррекции удалён base_name (схема):

https://github.com/anthonyaxenov/atol-online/blob/v0.3.5-b/src/AtolOnline/Entities/CorrectionInfo.php#L37

5.4: удалён предмет расчётов composite и добавлены новые (схема):

award
deposit
expense
pension_insurance_ip
pension_insurance
medical_insurance_ip
medical_insurance
social_insurance
casino_payment

https://github.com/anthonyaxenov/atol-online/blob/v0.3.5-b/src/AtolOnline/Constants/PaymentObjects.php

Миграция на php 8.0

Основная поддержка php версии 7.4 заканчивается 28.11.2021.
Для себя я не вижу смысла продолжать писать основную кодовую базу для этой версии.

Минимальная версия php будет повышена до >=8.0, соответственно и зависимости. Поэтому следующий релиз будет мажорным v1.0.0 и обратно несовместимым с v0.*

Для php 7.4 я буду поддерживать этот пакет только засчёт ваших PR.

Ошибка формирования ставки НДС для "без НДС" и "НДС - 0" в чеках коррекции

В JSON операции чека коррекции прихода, в отличие от чека прихода, обязательно наличие массива vats.
https://online.atol.ru/files/API_atol_online_v4.pdf
В классе Vats, метод calculator для НДС none и vat0 возвращается значение 0.
Для чека коррекции необходимо, чтобы возвращалась сумма платежей без НДС или с НДС 0 процентов.
НО: для чека прихода/возврата прихода необходимо, чтобы возвращалось 0, иначе выйдет ошибка "Несоответствие НДС сумме платежей"

Пример - сумма без НДС 100 рублей
В JSON чека коррекции должно быть:

"vats":[
 {
 "type":"none",
 "sum":100
 },
]

А в чеке прихода:

"vats":[
 {
 "type":"none",
 "sum":0
 },
]

Или как-то так.

Чек коррекции с некорректной суммой без НДС, пробитый через реп
Снимок экрана от 2021-05-24 18-53-21

События (events)

Эмитировать события:

  • регистрация документов: перед отправкой запроса
  • регистрация документов: после получения ответа
  • мониторинг: перед отправкой запроса
  • мониторинг: после получения ответа
  • ...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.