i-tee/calc395

Расчёт процентов по статье 395 ГК РФ

Maintainers

Details

github.com/i-tee/calc395

Source

Issues

Installs: 0

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 1

Forks: 0

Open Issues: 0

Language:JavaScript

dev-main 2024-12-14 10:54 UTC

This package is auto-updated.

Last update: 2025-06-14 12:05:52 UTC


README

PHP-Библиотека для расчета процентов по правилам статьи 395 ГК РФ

Эта библиотека разработана для автоматического расчета процентов за пользование чужими денежными средствами, в соответствии с нормами ст. 395 ГК РФ. Она особенно полезна для юристов, бухгалтеров и разработчиков, которым необходимо реализовать такой функционал в своих проектах.

Основные преимущества

  • Простота использования: минимум настроек для интеграции.
  • Готовые инструменты: HTML-шаблон, стили и JavaScript для быстрого запуска.
  • Гибкость: возможность настройки данных (например, ставок и изменений сумм).
  • Соответствие законодательству РФ: расчет по ключевым ставкам с учетом актуальных данных.

Демо-версия

Ознакомьтесь с работой калькулятора: Демо калькулятора.
Демонстрация позволяет проверить расчеты в реальном времени.

Установка

Для установки библиотеки используйте Composer:

composer require i-tee/calc395

Состав пакета

После установки вы получите следующие файлы:

  • Calc395.php — основной файл библиотеки, необходимый для расчетов.
  • calccontainer.html — HTML-шаблон, используемый для визуального интерфейса (поддерживает Bootstrap 5).
  • lang_ru.ini — файл локализации (русский язык).
  • rates.json — данные о ключевых ставках Центробанка РФ с 2016 по 2025 гг.
  • script.js — JavaScript для взаимодействия интерфейса с библиотекой.
  • style.css — стили для оформления HTML-шаблона.

Минимальные требования

  • PHP 7.4 или выше.
  • Composer для управления зависимостями.
  • jQuery - если использовать готовый интерфейс

Как использовать библиотеку

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

    Импортируйте класс в вашем PHP-коде:

    use Calc395\Calc395;
    
    $calc = new Calc395();
  2. Передача данных для расчета

    Формат данных:

    $data = [
        "amount" => "100000", // Сумма долга (строка для точности больших значений)
        "startDate" => "2023-11-03", // Дата начала периода (ГГГГ-ММ-ДД)
        "endDate" => "2024-02-15",   // Дата окончания периода
        "changes" => [ // Необязательные данные
            "plus" => [ // Изменения, увеличивающие долг, комментарий
                ["date" => "2024-12-03", "summ" => "1000", "comment" => "comment text"]
            ],
            "minus" => [ // Изменения, уменьшающие долг, комментарий
                ["date" => "2024-11-27", "summ" => "1500", "comment" => "comment text"]
            ],
            "ignoring" => [  //Интервал времени, когда начисления процентов не происходит, комментарий
                ["date1" => "2023-11-05", "date2" => "2023-11-16", "comment" => "comment text"]
            ]
         ]
    ];
    
    $calc->add($data);
  3. Получение результата

    После выполнения расчета метод getResult() вернет данные в виде массива:

    $result = $calc->getResult();
    echo json_encode($result);

    Пример результата:

    {
         "intervals": [  // array — Массив интервалов времени, на которые разбивается расчёт
             {
                 "comment": false,   // Комментарий, может быть взят из периода не начислений
                 "from": "2023-11-03",  // string (формат даты) — Начало интервала
                 "to": "2023-12-17",  // string (формат даты) — Конец интервала
                 "accrual": "true",  // boolean — Начисляется неустойка или нет (true/false)
                 "days": 45,  // integer — Количество дней в интервале
                 "debt": 100000,  // float — Основная сумма долга на начало интервала
                 "dy": 365,  // integer — Количество дней в году, для расчёта дневной ставки
                 "rate": "15",  // string — Процентная ставка в процентах
                 "penalty": 1849.32  // float — Сумма неустойки, рассчитанная для этого интервала
             }
         ],
         "changes": [ // array — Массив уменьшений или величений основной суммы долга
             {
                 "date": "2023-11-13",   // string (формат даты) — Дата изменения
                 "summ": -12500, // float — Сумма изменения
                 "comment": "СберБанк"   // string — Комментарий изменения
             }
         ],
         "amount": 100000,  // integer — Основная сумма долга
         "final_amount": 100000,  // integer — Итоговая сумма долга (если не было изменений)
         "penalty_days": 100,  // integer — Количество дней, на которые начислены проценты
         "all_days": 105,  // integer — Общее количество дней
         "penalty_summ": 4473.95,  // float — Общая сумма неустойки за все периоды
         "mean_rate": 15.57,  // float — Средняя ставка процента по всем периодам
         "debt": 104473.95,  // float — Итоговая сумма долга с учётом неустойки
         "startDate": "2023-11-03",  // string (формат даты) — Дата начала расчёта
         "endtDate": "2024-02-15",  // string (формат даты) — Дата окончания расчёта
         "ignoring": [   // array — Массив интервалов времени, когда начисления процентов не производятся
             {
                 "date1": "2023-11-10",  // string (формат даты) — Начало интервала
                 "date2": "2023-12-10",  // string (формат даты) — Конец интервала
                 "comment": "Каникулы"   // Описание интервала
             }
         ]
     }

Использование готового интерфейса

В комплекте есть готовый интерфейс калькулятора:

  1. Подключите jQuery:

    <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
  2. Выведите HTML-шаблон и скрипты через библиотеку:

    $calc->getCalcStyle();    // Подключает CSS
    $calc->getCalcTmplHtml(); // Выводит HTML-шаблон
    $calc->getLangJSON();     // Создает языковую переменную
    $calc->getScriptTag();    // Подключает JavaScript
  3. Настройте обработку AJAX-запросов:

    if (isset($_GET['ajax']) && $_GET['ajax'] === 'true') {
        $calc->add($_GET['data']);
        echo json_encode($calc->getResult());
    }

Пример гипотетического index.php:

use Calc395\Calc395;    # Подкоючаем библиотеку
$calc = new Calc395();  # Создаем экземпляр класса

if(isset($_GET['ajax']) and $_GET['ajax'] == true){     # Если запрос от калькулятора с данными для расчёте

    $calc->add($_GET['data']);  # Передаем данные калькулятору
    $data = $calc->getResult(); # Получаем результат расчета
    
    header('Content-Type: application/json');   # Указываем что ответ будет в вормате JSON
    echo json_encode($data);    # Выводим объект с расчётами

}else{  # Если запрос не от калькулятора, открываем страницу калькулятора

    # Не забываем подлючить jQuery, она нужна для скрипта калькулятора
    // <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>

    $calc::getCalcStyle();    # Выведет содержимое style.css
    $calc::getCalcTmplHtml(); # Выведет содержимое calccontainer.html
    $calc::getLangJSON();     # Создаст глобальную переменную в js calcLangData с языковыми переменными
    $calc::getScriptTag();    # Выведет содержимое script.js

}
  1. Калькулятор из шаблона будет обращаться при помощи Ajax к текущему url и с помощью JavaScript показывать результаты расчета.
  2. По этому, добавьте обработку http-запросов: если в запросе есть get-переменная ajax и она равна true - то это запрос с данными из формы калькулятора.
  3. Данные из запроса нужно передать классу $calc = new Calc395() методом $calc->add($_GET['data']).
  4. Получить результат расчета $data = $calc->getResult().
  5. Вывести результат в виде JSON-объекта echo json_encode($data)

Контакты

Если у вас есть вопросы или предложения, создайте issue на GitHub или свяжитесь с автором библиотеки.