Przejdź do głównej zawartości

Reguły kwot

Ksefnik zawiera 4 reguły walidujące poprawność kwot na fakturach. Wszystkie kwoty są wyrażone w groszach (1 PLN = 100 groszy).

Sprawdza, czy kwota brutto jest dodatnia.

import { amountPositiveRule } from '@ksefnik/core'
PoleWarunek
grossAmount> 0
Kwota (grosze)PLNWynik
1230001 230,00valid
10,01valid
00,00invalid
-100-1,00invalid

Sprawdza, czy kwota brutto nie przekracza maksimum.

import { amountMaxRule } from '@ksefnik/core'
PoleWarunek
grossAmount<= 9 999 999 999 groszy (99 999 999,99 PLN)
Kwota (grosze)PLNWynik
999999999999 999 999,99valid
10000000000100 000 000,00invalid

Sprawdza, czy suma wartości netto pozycji (lineItems) jest równa kwocie netto faktury.

import { lineItemsSumRule } from '@ksefnik/core'
PoleWarunek
lineItemssum(lineItems[].netAmount) === netAmount

Przykład — valid:

const invoice = {
netAmount: 100000, // 1000,00 PLN
lineItems: [
{ netAmount: 60000, description: 'Usługa A', lineNumber: 1 },
{ netAmount: 40000, description: 'Usługa B', lineNumber: 2 },
],
}
// sum = 60000 + 40000 = 100000 === netAmount -> valid

Przykład — invalid:

const invoice = {
netAmount: 100000,
lineItems: [
{ netAmount: 60000, description: 'Usługa A', lineNumber: 1 },
{ netAmount: 30000, description: 'Usługa B', lineNumber: 2 },
],
}
// sum = 60000 + 30000 = 90000 !== 100000 -> invalid
// message: "Line items net sum (90000) != netAmount (100000)"

Sprawdza, czy kwota VAT jest poprawna: grossAmount - netAmount === vatAmount z tolerancją +-1 grosz.

import { vatCalculationRule } from '@ksefnik/core'
PoleWarunek
vatAmountróżnica brutto - netto - VAT nie większa niż 1 grosz

Przykład — valid:

const invoice = {
grossAmount: 123000, // 1230,00 PLN
netAmount: 100000, // 1000,00 PLN
vatAmount: 23000, // 230,00 PLN
}
// 123000 - 100000 = 23000 === vatAmount -> valid

Przykład — valid (tolerancja 1 grosz):

const invoice = {
grossAmount: 123001, // 1230,01 PLN
netAmount: 100000,
vatAmount: 23000,
}
// |123001 - 100000 - 23000| = 1 <= 1 -> valid

Przykład — invalid:

const invoice = {
grossAmount: 123000,
netAmount: 100000,
vatAmount: 20000, // powinno być 23000
}
// |123000 - 100000 - 20000| = 3000 > 1 -> invalid
import { validateInvoice, amountPositiveRule, amountMaxRule,
lineItemsSumRule, vatCalculationRule } from '@ksefnik/core'
const amountRules = [amountPositiveRule, amountMaxRule, lineItemsSumRule, vatCalculationRule]
const report = validateInvoice(invoice, amountRules)