Last active
June 11, 2024 16:01
-
-
Save hasokeric/87118eb580d4865f49d1038bee4353d7 to your computer and use it in GitHub Desktop.
Epicor NACHA File
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
+----------------------------+ | |
| File Transmission Record | | |
+----------------------------+ | |
| | |
v | |
+----------------------------+ <--------- First physical record(s) on file | |
| File Header Record | <--------- Type 1 - File Header Record | |
+----------------------------+ <--------- One per file - first logical record on file | |
| | |
v | |
+----------------------------+ | |
| Company/Batch Header Rec | <--------- Type 5 - Company/Batch Header Record | |
+----------------------------+ <--------- One per batch | |
| | |
v | |
+----------------------------+ | |
| First Entry Detail Rec | <--------- Each entry detail may have an optional Addenda Record | |
+----------------------------+ <--------- Type 6 - Entry Detail Record | |
| | |
v | |
+----------------------------+ | |
| Second Entry Detail Rec | | |
+----------------------------+ | |
| | |
v | |
....... | |
| | |
v | |
+----------------------------+ | |
| Last Entry Detail Rec | | |
+----------------------------+ | |
| | |
v | |
+----------------------------+ | |
| Company/Batch Control Rec | <--------- Type 8 - Company/Batch Control Record | |
+----------------------------+ <--------- One per batch | |
| | |
v | |
........ | |
| | |
v | |
+----------------------------+ | |
| Company/Batch Header Rec | | |
+----------------------------+ | |
| | |
v | |
+----------------------------+ | |
| First Entry Detail Rec | | |
+----------------------------+ | |
| | |
v | |
....... | |
| | |
v | |
+----------------------------+ | |
| Last Entry Detail Rec | | |
+----------------------------+ | |
| | |
v | |
+----------------------------+ | |
| Company/Batch Control Rec | <--------- Type 8 - Company/Batch Control Record | |
+----------------------------+ | |
| | |
v | |
+----------------------------+ | |
| File Control Record | <--------- Type 9 - File Control Record | |
+----------------------------+ <--------- One per file - last logical record | |
| | |
v | |
+----------------------------+ | |
| Blocking or Padding Record | <--------- File used to complete last physical block | |
+----------------------------+ | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static List<DateTime> GetBankHolidays(int year) | |
{ | |
// Initialize holidays list with all holidays | |
List<DateTime> holidays = new List<DateTime> | |
{ | |
// New Year's Day | |
new DateTime(year, 1, 1), | |
// Martin Luther King Jr. Day (3rd Monday in January) | |
new DateTime(year, 1, 1).AddDays((3 - 1) * 7 + (DayOfWeek.Monday - new DateTime(year, 1, 1).DayOfWeek + 7) % 7), | |
// Presidents' Day (3rd Monday in February) | |
new DateTime(year, 2, 1).AddDays((3 - 1) * 7 + (DayOfWeek.Monday - new DateTime(year, 2, 1).DayOfWeek + 7) % 7), | |
// Memorial Day (last Monday in May) | |
new DateTime(year, 5, 31).AddDays(-(int)new DateTime(year, 5, 31).DayOfWeek + (int)DayOfWeek.Monday), | |
// Juneteenth National Independence Day | |
new DateTime(year, 6, 19), | |
// Independence Day | |
new DateTime(year, 7, 4), | |
// Labor Day (1st Monday in September) | |
new DateTime(year, 9, 1).AddDays((1 - 1) * 7 + (DayOfWeek.Monday - new DateTime(year, 9, 1).DayOfWeek + 7) % 7), | |
// Columbus Day (2nd Monday in October) | |
new DateTime(year, 10, 1).AddDays((2 - 1) * 7 + (DayOfWeek.Monday - new DateTime(year, 10, 1).DayOfWeek + 7) % 7), | |
// Veterans Day | |
new DateTime(year, 11, 11), | |
// Thanksgiving Day (4th Thursday in November) | |
new DateTime(year, 11, 1).AddDays((4 - 1) * 7 + (DayOfWeek.Thursday - new DateTime(year, 11, 1).DayOfWeek + 7) % 7), | |
// Christmas Day | |
new DateTime(year, 12, 25) | |
}; | |
// Adjust holidays that fall on weekends | |
for (int i = 0; i < holidays.Count; i++) | |
{ | |
if (holidays[i].DayOfWeek == DayOfWeek.Saturday) | |
holidays[i] = holidays[i].AddDays(-1); // Observed on Friday | |
else if (holidays[i].DayOfWeek == DayOfWeek.Sunday) | |
holidays[i] = holidays[i].AddDays(1); // Observed on Monday | |
} | |
return holidays; | |
} | |
public static Func<int, List<DateTime>> GetBankHolidays = (year) => | |
{ | |
// Initialize holidays list with all holidays | |
List<DateTime> holidays = new List<DateTime> | |
{ | |
new DateTime(year, 1, 1), // New Year's Day | |
new DateTime(year, 1, 1).AddDays((3 - 1) * 7 + (DayOfWeek.Monday - new DateTime(year, 1, 1).DayOfWeek + 7) % 7), // Martin Luther King Jr. Day | |
new DateTime(year, 2, 1).AddDays((3 - 1) * 7 + (DayOfWeek.Monday - new DateTime(year, 2, 1).DayOfWeek + 7) % 7), // Presidents' Day | |
new DateTime(year, 5, 31).AddDays(-(int)new DateTime(year, 5, 31).DayOfWeek + (int)DayOfWeek.Monday), // Memorial Day | |
new DateTime(year, 6, 19), // Juneteenth National Independence Day | |
new DateTime(year, 7, 4), // Independence Day | |
new DateTime(year, 9, 1).AddDays((1 - 1) * 7 + (DayOfWeek.Monday - new DateTime(year, 9, 1).DayOfWeek + 7) % 7), // Labor Day | |
new DateTime(year, 10, 1).AddDays((2 - 1) * 7 + (DayOfWeek.Monday - new DateTime(year, 10, 1).DayOfWeek + 7) % 7), // Columbus Day | |
new DateTime(year, 11, 11), // Veterans Day | |
new DateTime(year, 11, 1).AddDays((4 - 1) * 7 + (DayOfWeek.Thursday - new DateTime(year, 11, 1).DayOfWeek + 7) % 7), // Thanksgiving Day | |
new DateTime(year, 12, 25) // Christmas Day | |
}; | |
// Adjust holidays that fall on weekends | |
for (int i = 0; i < holidays.Count; i++) | |
{ | |
if (holidays[i].DayOfWeek == DayOfWeek.Saturday) | |
holidays[i] = holidays[i].AddDays(-1); // Observed on Friday | |
else if (holidays[i].DayOfWeek == DayOfWeek.Sunday) | |
holidays[i] = holidays[i].AddDays(1); // Observed on Monday | |
} | |
return holidays; | |
}; | |
public static Func<int, List<DateTime>> GetBankHolidays = (year) => | |
{ | |
// Initialize holidays list with all holidays | |
List<DateTime> holidays = new List<DateTime> | |
{ | |
// New Year's Day | |
new DateTime(year, 1, 1), | |
// Martin Luther King Jr. Day (3rd Monday in January) | |
new DateTime(year, 1, 1).AddDays((3 - 1) * 7 + (DayOfWeek.Monday - new DateTime(year, 1, 1).DayOfWeek + 7) % 7), | |
// Presidents' Day (3rd Monday in February) | |
new DateTime(year, 2, 1).AddDays((3 - 1) * 7 + (DayOfWeek.Monday - new DateTime(year, 2, 1).DayOfWeek + 7) % 7), | |
// Memorial Day (last Monday in May) | |
new DateTime(year, 5, 31).AddDays(-(int)new DateTime(year, 5, 31).DayOfWeek + (int)DayOfWeek.Monday), | |
// Juneteenth National Independence Day | |
new DateTime(year, 6, 19), | |
// Independence Day | |
new DateTime(year, 7, 4), | |
// Labor Day (1st Monday in September) | |
new DateTime(year, 9, 1).AddDays((1 - 1) * 7 + (DayOfWeek.Monday - new DateTime(year, 9, 1).DayOfWeek + 7) % 7), | |
// Columbus Day (2nd Monday in October) | |
new DateTime(year, 10, 1).AddDays((2 - 1) * 7 + (DayOfWeek.Monday - new DateTime(year, 10, 1).DayOfWeek + 7) % 7), | |
// Veterans Day | |
new DateTime(year, 11, 11), | |
// Thanksgiving Day (4th Thursday in November) | |
new DateTime(year, 11, 1).AddDays((4 - 1) * 7 + (DayOfWeek.Thursday - new DateTime(year, 11, 1).DayOfWeek + 7) % 7), | |
// Christmas Day | |
new DateTime(year, 12, 25) | |
}; | |
// Adjust holidays that fall on weekends | |
for (int i = 0; i < holidays.Count; i++) | |
{ | |
if (holidays[i].DayOfWeek == DayOfWeek.Saturday) | |
holidays[i] = holidays[i].AddDays(-1); // Observed on Friday | |
else if (holidays[i].DayOfWeek == DayOfWeek.Sunday) | |
holidays[i] = holidays[i].AddDays(1); // Observed on Monday | |
} | |
return holidays; | |
}; | |
public static Func<DateTime, DateTime> GetNextValidDate = (inputDate) => | |
{ | |
// Initialize holidays list with all holidays for the input year | |
List<DateTime> holidays = new List<DateTime> | |
{ | |
// New Year's Day | |
new DateTime(inputDate.Year, 1, 1), | |
// Martin Luther King Jr. Day (3rd Monday in January) | |
new DateTime(inputDate.Year, 1, 1).AddDays((3 - 1) * 7 + (DayOfWeek.Monday - new DateTime(inputDate.Year, 1, 1).DayOfWeek + 7) % 7), | |
// Presidents' Day (3rd Monday in February) | |
new DateTime(inputDate.Year, 2, 1).AddDays((3 - 1) * 7 + (DayOfWeek.Monday - new DateTime(inputDate.Year, 2, 1).DayOfWeek + 7) % 7), | |
// Memorial Day (last Monday in May) | |
new DateTime(inputDate.Year, 5, 31).AddDays(-(int)new DateTime(inputDate.Year, 5, 31).DayOfWeek + (int)DayOfWeek.Monday), | |
// Juneteenth National Independence Day | |
new DateTime(inputDate.Year, 6, 19), | |
// Independence Day | |
new DateTime(inputDate.Year, 7, 4), | |
// Labor Day (1st Monday in September) | |
new DateTime(inputDate.Year, 9, 1).AddDays((1 - 1) * 7 + (DayOfWeek.Monday - new DateTime(inputDate.Year, 9, 1).DayOfWeek + 7) % 7), | |
// Columbus Day (2nd Monday in October) | |
new DateTime(inputDate.Year, 10, 1).AddDays((2 - 1) * 7 + (DayOfWeek.Monday - new DateTime(inputDate.Year, 10, 1).DayOfWeek + 7) % 7), | |
// Veterans Day | |
new DateTime(inputDate.Year, 11, 11), | |
// Thanksgiving Day (4th Thursday in November) | |
new DateTime(inputDate.Year, 11, 1).AddDays((4 - 1) * 7 + (DayOfWeek.Thursday - new DateTime(inputDate.Year, 11, 1).DayOfWeek + 7) % 7), | |
// Christmas Day | |
new DateTime(inputDate.Year, 12, 25) | |
}; | |
// Adjust holidays that fall on weekends | |
holidays = holidays.Select(holiday => | |
{ | |
if (holiday.DayOfWeek == DayOfWeek.Saturday) | |
return holiday.AddDays(-1); // Observed on Friday | |
if (holiday.DayOfWeek == DayOfWeek.Sunday) | |
return holiday.AddDays(1); // Observed on Monday | |
return holiday; | |
}).ToList(); | |
// Check if inputDate is a holiday | |
if (holidays.Contains(inputDate)) | |
{ | |
// Find the next valid date using LINQ | |
inputDate = Enumerable.Range(1, int.MaxValue) | |
.Select(offset => inputDate.AddDays(offset)) | |
.First(date => !holidays.Contains(date)); | |
} | |
return inputDate; | |
}; | |
public static Func<DateTime?, DateTime?> GetNextValidDate = inputDate => | |
{ | |
if (!inputDate.HasValue) return null; | |
var date = inputDate.Value; | |
var holidays = new List<DateTime> | |
{ | |
new DateTime(date.Year, 1, 1), | |
new DateTime(date.Year, 1, 1).AddDays((3 - 1) * 7 + (DayOfWeek.Monday - new DateTime(date.Year, 1, 1).DayOfWeek + 7) % 7), | |
new DateTime(date.Year, 2, 1).AddDays((3 - 1) * 7 + (DayOfWeek.Monday - new DateTime(date.Year, 2, 1).DayOfWeek + 7) % 7), | |
new DateTime(date.Year, 5, 31).AddDays(-(int)new DateTime(date.Year, 5, 31).DayOfWeek + (int)DayOfWeek.Monday), | |
new DateTime(date.Year, 6, 19), | |
new DateTime(date.Year, 7, 4), | |
new DateTime(date.Year, 9, 1).AddDays((1 - 1) * 7 + (DayOfWeek.Monday - new DateTime(date.Year, 9, 1).DayOfWeek + 7) % 7), | |
new DateTime(date.Year, 10, 1).AddDays((2 - 1) * 7 + (DayOfWeek.Monday - new DateTime(date.Year, 10, 1).DayOfWeek + 7) % 7), | |
new DateTime(date.Year, 11, 11), | |
new DateTime(date.Year, 11, 1).AddDays((4 - 1) * 7 + (DayOfWeek.Thursday - new DateTime(date.Year, 11, 1).DayOfWeek + 7) % 7), | |
new DateTime(date.Year, 12, 25) | |
}.Select(holiday => holiday.DayOfWeek == DayOfWeek.Saturday ? holiday.AddDays(-1) : holiday.DayOfWeek == DayOfWeek.Sunday ? holiday.AddDays(1) : holiday).ToList(); | |
return holidays.Contains(date) ? Enumerable.Range(1, int.MaxValue).Select(offset => date.AddDays(offset)).First(d => !holidays.Contains(d)) : date; | |
}; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment