namespace ComplianceBLL.Common; // Shared MMYYYY return-period parsing — was previously a private copy inside GSTOutwardBLL with no // shape validation (int.Parse on a malformed string throws an unhandled FormatException/ // ArgumentOutOfRangeException that surfaces as a 500 with no useful message). public static class ReturnPeriodHelper { public static bool IsValidShape(string returnPeriod) => returnPeriod.Length == 6 && int.TryParse(returnPeriod.AsSpan(0, 2), out var month) && month is >= 1 and <= 12 && int.TryParse(returnPeriod.AsSpan(2, 4), out _); public static (DateTime fromDate, DateTime toDate) ParseReturnPeriod(string returnPeriod) { var month = int.Parse(returnPeriod[..2]); var year = int.Parse(returnPeriod[2..]); var from = new DateTime(year, month, 1); return (from, from.AddMonths(1).AddDays(-1)); } public static (int year, int month) ParseReturnPeriodYearMonth(string returnPeriod) { var month = int.Parse(returnPeriod[..2]); var year = int.Parse(returnPeriod[2..]); return (year, month); } }