Рассчет кэшбэка в Альфабанке
Из банков я предпочитаю Альфу, особенно после того как у них появились карты с кэшбэком.
Но вот чего мне не хватало, так это возможности самому посчитать ожидаемый размер кэшбэка. С целью потренировать свои скилы в C# решил накидать небольшую утилитку, которая сама посчитает размер кэшбека на основе выписки из Альфа.Клика.
Основные моменты:
1. Выгружаем выписку с Альфа.Клика, переименовываем в data.csv.
2. У каждой транзакции есть код MCC, который и определяет какой размер кэшкэка по ней будет. Где-то это 10%, где-то 5 или 1, а бывает, что и совсем его нет.
3. В выписке в отдельном столбце идет дата списания средств с карты, а не дата совершения транзакции.
4. В коде в обязательном порядке нужно указать номер карты, по которой вы получаете кэшбэк.
5. Утилита запрашивает номер месяца, за который вы хотите узнать кэшбэк. Вводить его нужно в формате мм.гг, например 8.17 покажет кэшбэк за август 2017 года.
У меня кэшбэк до копейки сходится с тем, что фактически мне присылает Альфа.
using System; using System.IO; using System.Text.RegularExpressions; namespace CashBack_Calc2 { class Program { static void Main(string[] args) { // Массив с кодами MCC и коэффициентами кэшбэка int[] mcc_coef = new int[9999]; // нет кэшбэка mcc_coef[4812] = -1; mcc_coef[4814] = -1; mcc_coef[5968] = -1; mcc_coef[6050] = -1; mcc_coef[6051] = -1; mcc_coef[6529] = -1; mcc_coef[6530] = -1; mcc_coef[7311] = -1; mcc_coef[7399] = -1; mcc_coef[7511] = -1; mcc_coef[7995] = -1; mcc_coef[6540] = -1; mcc_coef[4829] = -1; mcc_coef[6532] = -1; mcc_coef[6010] = -1; mcc_coef[6011] = -1; mcc_coef[6012] = -1; mcc_coef[6534] = -1; mcc_coef[6536] = -1; mcc_coef[6537] = -1; mcc_coef[6538] = -1; // АЗС mcc_coef[5541] = 10; mcc_coef[5542] = 10; mcc_coef[9752] = 10; mcc_coef[5983] = 10; // Кафе и рестораны mcc_coef[5812] = 5; mcc_coef[5813] = 5; mcc_coef[5814] = 5; mcc_coef[5811] = 5; // Загружаем данные для анализа string[] data = File.ReadAllLines("data.csv"); int str_count = data.Length; double total_money=0; Console.WriteLine("Введите месяц за который нужно рассчитать кэшбэк(формат мм.гг):"); string u_date = Console.ReadLine(); int i = 0; while (i < str_count) { // Находим в выписке строки с MCC String[] line = data[i].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); var mcc_code_full = line[5].Substring(line[5].Length - 7); if (mcc_code_full.Remove(3) == "MCC") { // Определяем MCC и номер карты var mcc_code = mcc_code_full.Remove(0, 3); if (line[5].Remove(16) == "555555++++++7777") // Номер карты по которой начисляется кэшбэк { // Находим дату совершения транзакции(а не дату списания). Match match = Regex.Match(line[5], @"\d \d\d[.]\d\d[.]\d\d"); string p_date=match.Captures[0].Value.Remove(0,2); // Если с датой все ок - считаем кэшбэк if (p_date.Contains(u_date)) { int coef = mcc_coef[Int32.Parse(mcc_code)]; if (coef == 0) { coef = 1; } if (coef == -1) { coef = 0; } Double res = Double.Parse(line[7]) * coef / 100; total_money = total_money + res; } } } i++; } total_money=Math.Round(total_money, 2); ; Console.WriteLine("Кэшбэк: " + total_money + " RUB"); Console.ReadLine(); } } }