Л А Б О Р А Т О Р И Я

актуальных

РЕШЕНИЙ


PHP Class TaxRate - TEST

решение тестовой задачи на PHP

После нескольких попыток получить тестовое задание от одной компании, получил приглашение на собеседование. Еще раз затребовал задания для теста, и вот свершилось чудо - получил. Тест состоял из нескольких блоков по 2-3 задачи в каждом. Вот одна из задач блока PHP, результат которой был принят специалистами компании, и обозначен как выполненный, на собеседовании.

Описание задачи:

Задание PHP TaxRate

Некоторые данные для задачи пришлось поискать. Так как было обозначено, что используется НДС для Российской Федерации, то необходимо было выяснить размер ставок НДС в различные периоды.

Ставки НДС в РФ по периодам:

  • до 1992 года НДС в РФ не применялся, соответственно его значение было равно 0;
  • в 1992 году ставка составляла 28%;
  • с 1993 по 2003 год применялась ставка 20%;
  • с 2004 по 2018 год ставка составляла 18%
  • с 2019 года 20%

Размышления над реализацией:

  1. Ввод в действие ставок НДС происходил всегда с 1 января, поэтому достаточно оперировать годами из даты счета и непосредственно размером ставки.
  2. Для тестирования поступим просто, будем создавать объект класса, передавать туда данные (сумму с НДС из счета и дату выставления/создания счета), после чего будем выводить результат вызова метода класса, который производит очистку суммы от НДС (см. строки 16-17 кода реализации).
  3. Ставки НДС по годам являются ретроспективными, и в прошедшие периоды уже не изменятся никогда, поэтому обьявим их в константе TAX в виде массива - ключами будут являться годы ввода/изменения ставки, а значением их размер в процентах (см. строка 22).
  4. В конструкторе класса, при создании объекта, мы получаем передаваемые атрибуты счета и сохраняем их в свойствах - $fullsum - сумма счета с НДС, $year - год выставления счета (см.строки 23-24).
  5. Обработку даты счета вынесем в отдельный метод checkYear (см. строки 51-55), потому что даты могу поступать в разном формате, и возможно понадобится расширение этого метода для контроля и обработки входных данных.
  6. В методе, который производит очистку суммы от НДС зададим две переменные: $taxrate, в которой будет сохранятся определяемая для года счета ставка НДС, и $tax - массив из константы TAX, который в процессе обработки может трансформироваться. (см. строки 37-38)
  7. Запускаем цикл проверки, является ли указанный год выставления счета младше года (ключа) последнего элемента массива $tax (см. строка 39-45). Цикл выполнится минимум 1 раз, и в случае, если год меньше ключа последнего элемента, то из массива $tax будет удален последний элемент (см. строка 40). В противном случае, мы нашли искомый результат и присваиваем значение последнего элемента массива $tax переменной сохраняющей ставку - $taxrate (см. строка 42).
  8. Если не будет выполняться ни в одном цикле условие (см. строка 40 ), массив $tax избавится от всех элементов и станет пустым. Это завершит выполнение цикла по условию (см. строка 45) и значение ставки $taxrate останется равным 0, что соответствует году счета ранее 1992 года.
  9. После определения размера ставки возвращаем из метода значение очищенной суммы, которая вычисляется путем простых арифметических операций (см. строка 47).

Вот такой результат получился:

PHP Class

Удачи в разработке!



другие материалы: