Files
brazil-swift-ops/packages/utils/src/dates.ts
defiQUG 8c771da399 Initial implementation: Brazil SWIFT Operations Platform
- Complete monorepo structure with pnpm workspaces and Turborepo
- All packages implemented: types, utils, rules-engine, iso20022, treasury, risk-models, audit
- React web application with TypeScript and Tailwind CSS
- Full Brazil regulatory compliance (BCB requirements)
- ISO 20022 message support (pacs.008, pacs.009, pain.001)
- Treasury and subledger management
- Risk, capital, and liquidity stress allocation
- Audit logging and BCB reporting
- E&O +10% uplift implementation
2026-01-23 14:51:10 -08:00

84 lines
1.9 KiB
TypeScript

/**
* Date utilities for effective date logic and rolling windows
*/
import { addDays, isAfter, isBefore, isWithinInterval, subDays } from 'date-fns';
export function isEffectiveDate(date: Date, effectiveDate: Date, expiryDate?: Date): boolean {
if (isBefore(date, effectiveDate)) {
return false;
}
if (expiryDate && isAfter(date, expiryDate)) {
return false;
}
return true;
}
export interface RollingWindow {
startDate: Date;
endDate: Date;
days: number;
}
export function calculateRollingWindow(
referenceDate: Date,
windowDays: number
): RollingWindow {
const startDate = subDays(referenceDate, windowDays);
return {
startDate,
endDate: referenceDate,
days: windowDays,
};
}
export function isWithinRollingWindow(
date: Date,
window: RollingWindow
): boolean {
return isWithinInterval(date, {
start: window.startDate,
end: window.endDate,
});
}
export function filterDatesInWindow(
dates: Date[],
window: RollingWindow
): Date[] {
return dates.filter((date) => isWithinRollingWindow(date, window));
}
export function calculateRetentionExpiry(
creationDate: Date,
retentionDays: number
): Date {
return addDays(creationDate, retentionDays);
}
export function shouldArchive(
creationDate: Date,
archivalAfterDays: number,
currentDate: Date = new Date()
): boolean {
const archivalDate = addDays(creationDate, archivalAfterDays);
return isAfter(currentDate, archivalDate);
}
export function shouldDelete(
creationDate: Date,
retentionDays: number,
currentDate: Date = new Date()
): boolean {
const expiryDate = calculateRetentionExpiry(creationDate, retentionDays);
return isAfter(currentDate, expiryDate);
}
export function formatISO20022Date(date: Date): string {
return date.toISOString().split('T')[0];
}
export function formatISO20022DateTime(date: Date): string {
return date.toISOString().split('.')[0];
}