Przejdź do głównej zawartości

Reguły NIP

Ksefnik zawiera 4 reguły walidujące poprawność numerów NIP na fakturach.

Sprawdza, czy NIP sprzedawcy (sellerNIP) ma poprawny format i sumę kontrolną.

import { nipFormatRule } from '@ksefnik/core'
PoleWarunek
sellerNIP10 cyfr + poprawna suma kontrolna

Suma kontrolna NIP: wagi [6, 5, 7, 2, 3, 4, 5, 6, 7] pomnożone przez pierwsze 9 cyfr, suma modulo 11 musi być równa 10. cyfrze.

NIPWynikPowód
5213456789validpoprawna suma kontrolna
1234567890invalidbłędna suma kontrolna
521345678invalidza mało cyfr
52134567ABinvalidzawiera litery

Sprawdza sumę kontrolną NIP nabywcy (buyerNIP), jeśli jest podany.

import { buyerNipFormatRule } from '@ksefnik/core'
PoleWarunek
buyerNIPpoprawna suma kontrolna (jeśli pole jest obecne)

Sprawdza, czy NIP sprzedawcy nie składa się z samych zer.

import { nipNotZerosRule } from '@ksefnik/core'
PoleWarunek
sellerNIPnie jest 0000000000
NIPWynik
5213456789valid
0000000000invalid

Sprawdza, czy NIP sprzedawcy i nabywcy są różne (wystawca nie fakturuje sam siebie).

import { sellerBuyerDifferentRule } from '@ksefnik/core'
PoleWarunek
buyerNIPsellerNIP !== buyerNIP (jeśli buyerNIP obecny)

Wszystkie reguły NIP korzystają z funkcji pomocniczej eksportowanej z @ksefnik/shared:

import { isValidNIP } from '@ksefnik/shared'
isValidNIP('5213456789') // true
isValidNIP('0000000000') // true (checksum OK, ale nip-not-zeros to złapie)
isValidNIP('1234567890') // false
isValidNIP('abc') // false
import { validateInvoice, nipFormatRule, buyerNipFormatRule,
nipNotZerosRule, sellerBuyerDifferentRule } from '@ksefnik/core'
const nipRules = [nipFormatRule, buyerNipFormatRule, nipNotZerosRule, sellerBuyerDifferentRule]
const report = validateInvoice(invoice, nipRules)
const nipErrors = report.results.filter(r => !r.valid)
// [{ rule: 'nip-format', field: 'sellerNIP', message: 'Invalid seller NIP checksum' }]