Пишем биллинг. Как вычислять периоды услуг.

Когда работаете с датами, не забывайте страдать 😉

Есть услуга, которая стоит 300 рублей и продавец говорит, что услуга предоставляется на 1 месяц. Что такое месяц?

Обычно, мы не задумываемся об этом, а продавцы в своём договоре это стараются фиксировать. Кто-то говорит, что за месяц принимается фиксированное количество дней, обычно 30. Кто-то прописывает, что это календарный месяц.

Раньше, я считал, что если услуга заказана на 1 месяц, то можно просто прибавить единичку к месяцу. Но как быть с ситуацией, когда клиент заказал услугу 31 января, ведь 31 февраля не существует! Тут то и начинается всё веселье.

Лично мне не нравится схема, когда за месяц принимается какое-то фиксированное число дней. Я считаю такой подход не честным по отношению к клиенту. В году 365 дней, а иногда, даже 366 🙂 На 30 дней эти числа никак не делятся. Тогда как можно оказать услугу на год?

Должен быть какой-то правильный, честный и универсальный способ подсчета периодов действия услуг.

Ну и не забываем, что в ряде случаев, клиент может захотеть отказаться от услуги, с последующим перерасчетом. т.е. у нас должна быть формула, которая работает в обе стороны.

В этом месте читающий скажет: «Да в чем проблема считать даты исходя из кол-ва дней конкретных месяцев?» И я так сказал, но опять не обходиться без страданий (не забываем страдать).

Давайте попробуем вычислить дату окончания услуги, заказанную 2017-01-01 и оплаченную на 1 месяц:

Получили: 2017-01-31 23:59:59 (здесь всё хорошо).

Но теперь представим ситуацию, что клиент заказал услугу в 2017-01-02, как теперь вычислить дату окончания?

Нам кажется, что услуга должна кончиться: 2017-02-01 23:59:59, но правильный ответ: 2017-02-01 21:40:37 (всё из-за того, что в феврале всего 28 дней, и стоимость одного дня в феврале выше, чем в январе).

И тут нам кажется, что мы молодцы, мы написали правильную формулу и можно идти пить пиво…. но….

Предположим, что клиент заказывает услугу не на 1 месяц, а на 1 месяц и 1 день! Казалось бы ерунда, мы к этому готовы, и мы же готовы объявить клиенту стоимость такого периода? Мы же знаем, что услуга стоит 300 рублей в месяц, так давайте скажем, стоимость услуги на 1 день больше? Да, легко? Нам же никто не мешает узнать кол-во дней в месяце этого злосчастного одного дня? Да, можем… идём пить пиво…

Блииин, а если клиент оплатит услугу не сразу, если клиент положит услугу в корзину? А если, пока клиент будет оплачивать, наступит следующий месяц? А мы же уже посчитали стоимость услуги и сказали её клиенту?! Блин…. не забывайте страдать….

Добавить комментарий


%d такие блоггеры, как: