Не имей сто рублей
Я работаю начальником группы разработчиков в одном из банков. В прошлом релизе мы наконец-то внедрили дебетовые валютные карточки и, как водится, запустили пилотную серию для проверки на себе перед началом продаж клиентам.
В отпуск я как раз и взяла с собой пилотную карточку. После снятия в одном из банкоматов на Рамбле 150 евро я получила эсемеску о списании 250 евро. «Украли всё, что нажито непосильным трудом!» — была моя первая мысль. Через минуту размышлений: «Не заблокировать ли карточку? Но как прожить неделю в отпуске на снятые 150 евро? Может, снять все деньги? А не спишется ли большая сумма поверх в технический овердрафт?»
Сработал фродоаналайзер и прислал сообщение о выполненной транзакции с корректной суммой. Значит, всё-таки не мошенничество, а какой-то косяк в нашей информационной системе.
Когда на следующий день после обработки файла с подтверждениями транзакций от платёжной системы потерянные 100 евро вернулись, стало понятно, что проблема с комиссией, резервируемой при выполнении первоначальной авторизационной транзакции в банкомате. Хорошо, что при оплате картой покупок всё было нормально.
Вышла на работу, стала искать ошибку. Скрипт, рассчитывающий сумму комиссии, возвращает 100. Но в настройках ИС валюта транзакции — рубли. Я решила, что комиссия должна составлять 100 рублей, и 100 евро — баг ИС, которая игнорирует валюту.
Мои проклятия вендору (правда, причин на это имеется достаточно и без этой комиссии) взбаламутили весь банк и дошли аж до зама председателя правления: долгожданный продукт клиентам продавать нельзя при такой-то фиче. Выяснили: если валюта счёта не соответствует валюте комиссии, то необходимо указывать курс конвертации, а по умолчанию он 1:1.
Собрала аналитиков. На мои вопли об ужасающей трабле один из них вспомнил, что в скрипт расчёта комиссии должны были добавить блок кода, который по префиксам валютных карт должне возвращать не 100, а 2,5. Упс… А скрипт-то на сопровождении наших программистов, а не вендорских!
Открываю код. Для Visa: если первые девять цифр равны определённым комбинациям из девяти цифр, то возвращаем 2,5. Для MasterCard: если первые девять цифр равны определённым комбинациям из восьми цифр, то тоже возвращаем 2,5. Видно, копипастнули неаккуратно.
Cтала искать в хранилище исходников, кто же такое накодил. Как выяснилось, автором изменения оказалась я же сама несколько месяцев назад. И вся королевская конница, и вся королевская рать в виде управления контроля качества не смогли этот баг поймать. Но теперь всё работает.