Reguły NIP
Ksefnik zawiera 4 reguły walidujące poprawność numerów NIP na fakturach.
nip-format
Dział zatytułowany „nip-format”Sprawdza, czy NIP sprzedawcy (sellerNIP) ma poprawny format i sumę kontrolną.
import { nipFormatRule } from '@ksefnik/core'| Pole | Warunek |
|---|---|
sellerNIP | 10 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.
| NIP | Wynik | Powód |
|---|---|---|
5213456789 | valid | poprawna suma kontrolna |
1234567890 | invalid | błędna suma kontrolna |
521345678 | invalid | za mało cyfr |
52134567AB | invalid | zawiera litery |
buyer-nip-format
Dział zatytułowany „buyer-nip-format”Sprawdza sumę kontrolną NIP nabywcy (buyerNIP), jeśli jest podany.
import { buyerNipFormatRule } from '@ksefnik/core'| Pole | Warunek |
|---|---|
buyerNIP | poprawna suma kontrolna (jeśli pole jest obecne) |
nip-not-zeros
Dział zatytułowany „nip-not-zeros”Sprawdza, czy NIP sprzedawcy nie składa się z samych zer.
import { nipNotZerosRule } from '@ksefnik/core'| Pole | Warunek |
|---|---|
sellerNIP | nie jest 0000000000 |
| NIP | Wynik |
|---|---|
5213456789 | valid |
0000000000 | invalid |
seller-buyer-different
Dział zatytułowany „seller-buyer-different”Sprawdza, czy NIP sprzedawcy i nabywcy są różne (wystawca nie fakturuje sam siebie).
import { sellerBuyerDifferentRule } from '@ksefnik/core'| Pole | Warunek |
|---|---|
buyerNIP | sellerNIP !== buyerNIP (jeśli buyerNIP obecny) |
Helper: isValidNIP
Dział zatytułowany „Helper: isValidNIP”Wszystkie reguły NIP korzystają z funkcji pomocniczej eksportowanej z @ksefnik/shared:
import { isValidNIP } from '@ksefnik/shared'
isValidNIP('5213456789') // trueisValidNIP('0000000000') // true (checksum OK, ale nip-not-zeros to złapie)isValidNIP('1234567890') // falseisValidNIP('abc') // falseimport { 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' }]