0

Pitch: Dia útil no PowerShell: as decisões por trás de um módulo pequeno

Agendadores (o do Windows, o cron) sabem "todo dia 5", mas não "3º dia útil do mês" nem "último dia útil". No mercado financeiro, onde trabalho, muita rotina vive aí. Escrevemos na Elekto um módulo PowerShell para isso, o ElektoCalendarPosh (MIT), e quero contar algumas decisões, porque o problema parece trivial e não é.

Feriados em arquivo texto

Uma data yyyy-MM-dd por linha, com comentários e descrição. Sem banco, sem API. Cada um mantém o seu (nacional, municipal, de bolsa) e versiona junto com os scripts. Linha mal formada é erro que aponta arquivo e linha: um erro de digitação nunca derruba um feriado em silêncio.

Calendários que tenham semanas que considerem todos os dias úteis (escalara 7x0?) ou alguns dias do meio da semana não úteis (4x3?) são suportados.

Não presumir

Um calendário só responde pelo período que cobre. Perguntar se 2100-03-02 é dia útil, num arquivo que vai até 2099, é erro. A alternativa (tratar como dia útil) é o tipo de bug que aparece num feriado, anos depois.

Vários calendários

-Calendar aceita vários arquivos; o dia é útil só se for útil em todos. É o caso de quem liquida no Brasil e nos EUA.

Contagem

Get-WorkdayDelta usa a convenção financeira usual: inclui o primeiro dia e exclui o último. Assim ela é a inversa de Add-Workday. Somar e contar dias úteis é aritmética, não um laço dia a dia.

O caso de uso

Não rodar algo, cegamente, todo dia, mas apenas em certos dias úteis.

Set-WorkdayCalendar C:\calendarios\br.txt
if ((Get-NthWorkdayInMonth 3) -ne (Get-Date).Date) { exit 0 }

A tarefa roda todo dia e só trabalha no 3º dia útil, por exemplo. Com -1, no último.

Para instalar da galeria:

Install-Module ElektoCalendarPosh

Críticas e sugestões, por favor, aqui ou nas issues.

Carregando publicação patrocinada...