Przejdź do głównej zawartości

Reguły dat

Ksefnik zawiera 4 reguły walidujące poprawność dat na fakturach.

Sprawdza, czy data wystawienia jest poprawną datą w formacie ISO (YYYY-MM-DD).

import { dateValidRule } from '@ksefnik/core'
PoleWarunek
issueDatepasuje do /^\d{4}-\d{2}-\d{2}$/ i jest poprawną datą
DataWynikPowód
2026-03-01validpoprawny format i wartość
2026-02-29invalid2026 nie jest rokiem przestępnym
2026/03/01invalidzły separator
01-03-2026invalidzły porządek (DD-MM-YYYY)
abcinvalidnie jest datą

Sprawdza, czy data wystawienia nie jest w przyszłości (z tolerancją 1 dnia).

import { dateNotFutureRule } from '@ksefnik/core'
PoleWarunek
issueDate<= jutro (dzisiaj + 1 dzień)

Tolerancja 1 dnia uwzględnia różnice stref czasowych i faktur wystawianych tuż przed północą.

// Jeśli dziś jest 2026-03-15:
// 2026-03-15 -> valid (dziś)
// 2026-03-16 -> valid (jutro = tolerancja)
// 2026-03-17 -> invalid (pojutrze)

Sprawdza, czy data płatności (dueDate) jest równa lub późniejsza niż data wystawienia.

import { dateOrderRule } from '@ksefnik/core'
PoleWarunek
dueDate>= issueDate (jeśli dueDate podane)
issueDatedueDateWynik
2026-03-012026-03-15valid
2026-03-012026-03-01valid (ten sam dzień)
2026-03-152026-03-01invalid
2026-03-01(brak)valid (pomijane)

Sprawdza, czy data wystawienia nie jest starsza niż 10 lat.

import { dateRangeRule } from '@ksefnik/core'
PoleWarunek
issueDatewiek faktury <= 10 lat
// Jeśli dziś jest 2026-03-15:
// 2016-03-16 -> valid (niecałe 10 lat)
// 2016-03-14 -> invalid (ponad 10 lat)
// 2026-03-01 -> valid (2 tygodnie temu)

Reguły date-not-future i date-range korzystają z context.now. Domyślnie jest to new Date(), ale możesz podać własną datę:

import { validateInvoice, dateNotFutureRule, dateRangeRule } from '@ksefnik/core'
const report = validateInvoice(
invoice,
[dateNotFutureRule, dateRangeRule],
{ now: new Date('2026-03-15') },
)
import { validateInvoice, dateValidRule, dateNotFutureRule,
dateOrderRule, dateRangeRule } from '@ksefnik/core'
const dateRules = [dateValidRule, dateNotFutureRule, dateOrderRule, dateRangeRule]
const report = validateInvoice(invoice, dateRules)
const dateErrors = report.results.filter(r => !r.valid)
// [{ rule: 'date-not-future', field: 'issueDate', message: 'Issue date cannot be in the future' }]