public void UpdateTaxes(TaxRecord taxRecord)
        {
            if (taxRecord == null)
            {
                throw new ArgumentException("Input data is invalid. See manual (Readme) for expected input formats");
            }
            if (string.IsNullOrEmpty(taxRecord.City))
            {
                throw new ArgumentException("City property is missing or invalid");
            }
            if (taxRecord.Tax.HasValue == false || taxRecord.Tax.Value == 0)
            {
                throw new ArgumentException("Tax must have a non-zero value");
            }
            if (string.IsNullOrEmpty(taxRecord.Day) == false)
            {
                DateTime dayDateTime;
                var      parseResult = DateTime.TryParse(taxRecord.Day, out dayDateTime);
                if (!parseResult)
                {
                    throw new ArgumentException("Day property is invalid. Expected date in acceptable format (e.g. YYYY.MM.DD)");
                }

                if (taxRecord.Year.HasValue || taxRecord.Month.HasValue || taxRecord.WeekOfYear.HasValue)
                {
                    throw new ArgumentException("Only one type of tax can be entered in one request.");
                }

                _taxRepository.AddDailyTax(taxRecord.City, dayDateTime, taxRecord.Tax.Value);
                return;
            }


            var year = taxRecord.Year ?? -1;

            if (year < 0)
            {
                throw new ArgumentException("Year property is missing or invalid");
            }

            if (taxRecord.Month.HasValue)
            {
                if (taxRecord.Month.Value < 1 || taxRecord.Month.Value > 12)
                {
                    throw new ArgumentException("Month property is invalid. Valid range: 1-12");
                }
                if (taxRecord.WeekOfYear.HasValue)
                {
                    throw new ArgumentException("Only one type of tax can be entered in one request.");
                }
                _taxRepository.AddMonthlyTax(taxRecord.City, year, taxRecord.Month.Value, taxRecord.Tax.Value);
                return;
            }
            if (taxRecord.WeekOfYear.HasValue)
            {
                var weekOfYear     = taxRecord.WeekOfYear.Value;
                var lastWeekOfYear = CalendarHelper.GetWeekOfYear(new DateTime(year, 12, 31));
                if (weekOfYear < 1 || weekOfYear > lastWeekOfYear)
                {
                    throw new ArgumentException("Week property is invalid. Valid range: 1..52 (or 53, or 54 - depends on year)");
                }
                _taxRepository.AddWeeklyTax(taxRecord.City, year, weekOfYear, taxRecord.Tax.Value);
            }

            _taxRepository.AddYearlyTax(taxRecord.City, year, taxRecord.Tax.Value);
        }