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