Компания занимается арендой крупной строительной техники. Не все контрагенты оплачивают услугу вовремя по договору. По закону на период просрочки должна начисляться неустойка. Юридический отдел при подготовке документов рассчитывает сумму неустойки по каждой такой неуплаченной вовремя услуге. Расчет неустойки производится по формуле:
- Для расчета периода отсрочки платежа необходимо использовать рабочий календарь
- День подписания договора, реализации не входит в срок отсрочки платежа
- В случае рабочих дней по договору учитаваются только рабочии дни
- В случае календарных дней по договору - считаются календарные дни. Но если последний день окончания срока попадает на выходной/праздничный день, тогда дата окончания срока переносится на ближайший следующий рабочий день.
Все эти моменты неудобно постоянно учитывать, а расчет для каждого документа становится очень трудозатратным. Готового иструмента для расчета нет, а существующие онлайн-калькуляторы выдают неподходящий, местами избыточный результат. Такие отчеты требуют дополнительной ручной обработки.
Нужно разработать программное обеспечение, которое выполняло бы расчет нейустойки автоматически с учетом вышеупомянутых условий.
Также в ходе общения будущими пользователями было принято решение не обрабатывать каждую заявку отдельно, а составлять таблицу со документами, а потом уже отдавать на обработку программы.
В итоге была определена следующая структура:
Данные о ключевой ставке будут запрашиватся с сайта ЦБ:
Ключевая ставка Банка России | Банк России (cbr.ru)https://cbr.ru/hd_base/KeyRate/
Пример исходной таблицы от пользователя:
Пример таблицы - результат:
В качестве интерфейса взаимодействия пользователя было выбрано диалоговое окно Windows
- Ключевая ставка Банка России | Банк России (cbr.ru)https://cbr.ru/hd_base/KeyRate/ - офицаильный сайт ЦБ. Можно получить актуальные значения ключевой ставки во указанный временной период
- https://isdayoff.ru/ - ресурс для определение выходного дня согласно рабочему календарю
- модуль
requests
- выполнение HTTP-запросов - модуль
BeautifulSoup
- удобное полученние иформации с HTML разметки - модуль
pandas
- работа с таблицами, расчеты, агрегации - модуль
tkinter
- создание визуального интерфейса пользователя - модуль
py2exe
- перобразовние Python скриптов в исполняемые программы Windows - модуль
Inno Setup
- создание установщика программ Windows из набора файлов
root
app.py
- главный файл приложения. Отвечает за визульное оформление, логику управления.functions.py
- вспомгательный файл с функциями дляapp.py
calc_installer.exe
- установщик программ Windows. В него упаковно приложение. Вы можете скачать и установить как обычное приложение в Windowsrequirements.txt
- полный список используемых библиотек
Логика работы для пользователя будет подробно расмотренна в руководстве пользователя https://drive.google.com/file/d/156DbUxLAj2Oeho4AcqCxlCchslWpW6xD/view?usp=sharing
После запуска приложения пользователю неоходимо выбрать исходную таблицу в любом доступном формате Excel.
Количество запросов единицу времени на сайт ЦБ ограничено службой безопасности (3-5 раза подряд обработает, потом минут 10 блокирует). Система понимает, что запросы ведутся из приложения. Найти рабочего решения как сделать подмену и система думала, что запросы выполняются из браузера и реальным человеком у меня не получилось. Поэтому было принято решение свести количество запросов к минимуму и использовать кеширование данных. После первого запуска программы будет создан файл:
../tables/rate_df.csv
, где будут хранится данные о ставках и рабочий календарь за указанный временной период.
Программа анализирует диапазон дат в исходной таблице. Если он больше, чем в rate_df.csv
, то подгружает недостающие данные.
Программа расчитывает период отсрочки согласно количеству дней по договору. Также выполняет агрегации и необходимые расчеты для получния финального формата таблицы, указанного заказчиком. Сохраняет в формате Excel.
https://drive.google.com/file/d/156DbUxLAj2Oeho4AcqCxlCchslWpW6xD/view?usp=sharing