Рассчет кэшбэка в Альфабанке

Из банков я предпочитаю Альфу, особенно после того как у них появились карты с кэшбэком.
Но вот чего мне не хватало, так это возможности самому посчитать ожидаемый размер кэшбэка. С целью потренировать свои скилы в 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();
        }
    }
}

Leave a Reply