PostingInstruction
PostingInstruction to kanoniczny zasób bufora dokumentów przekazywanych do księgowości do dalszego procedowania (dekretacja, ewidencja VAT, przygotowanie pod JPK). Model jest jeden i rozszerzalny przez attribute[] oraz profile walidacji.
Ten dokument zastąpił starszy wariant oparty o sourceDocument oraz postingLine[] jako warstwę zlecenia księgowania.
Kontrakt maszynowy (JSON Schema): PostingInstruction.schema.json, PostingInstructionLine.schema.json, AllocationItem.schema.json. Endpoint: /v1/posting-instructions (§5b).
Rozszerza DomainResource.
1. Zakres i granica odpowiedzialności
| Aspekt | Opis |
|---|---|
| PostingInstruction | Bufor opisu dokumentu od systemu zewnętrznego (co system wie o dokumencie i jak ma być procedowany). |
| Księgowość | Przetwarza bufor, wykonuje dekretację i ewidencję VAT; wynik księgowania jest dostępny jako JournalEntry. |
| DocumentReference | Nie jest zasobem wejściowym w tym procesie integracyjnym. |
2. Pola nagłówka
Poza polami z DomainResource (id, resourceType, meta, owner[] — wymagany, NIP, comment, category[], status — słownik posting-instruction-status, nadawany przez księgowość, type, contained[], attribute[] — §4):
Wszystkie pola kodowane (CodeableConcept) niosą coding.system wskazujący słownik (value set) — pełny rejestr w Systemy kodowania i value sety.
| Nazwa | Kard. | Typ | Opis |
|---|---|---|---|
| identifier | 2..* | Identifier | Identyfikatory dokumentu: co najmniej id dokumentu w systemie źródłowym i numer dokumentu — §2a. |
| participant | 0..* | Participant | Uczestnicy dokumentu: function = CodeableConcept (słownik posting-instruction-participant-function), actor = Reference(Party) przez identifier. Uczestnik bez funkcji to kontrahent dokumentu; funkcja vat-group-member oznacza członka grupy VAT. |
| attachment | 0..* | Attachment | Załączniki; url = adres dokumentu źródłowego (obraz faktury), title = numer/nazwa. W zapisie przekazywany jest pierwszy załącznik. |
| issueDate | 1..1 | date | Data wystawienia dokumentu. |
| realizationDate | 0..1 | date | Data otrzymania / realizacji. |
| symbol | 2..* | CodeableConcept | Symbole dokumentu — dwa kodowania w dwu słownikach (§2b). |
| paymentMethod | 0..1 | CodeableConcept | Forma płatności. Słownik: posting-instruction-payment-method (cash, transfer, credit-card, other); inny kod → 400. |
| accountingVariant | 0..1 | Reference(AccountingVariant) | Wariant dekretacji na nagłówku (identifier w przestrzeni AccountingVariant.Id). |
| grossAmount | 0..1 | Money | Kwota brutto. |
| netAmount | 0..1 | Money | Kwota netto. |
| vatAmount | 0..1 | Money | Kwota VAT. |
| register | 0..1 | Reference(Register) | Rejestr księgowy (identifier w przestrzeni Register.Id). |
| saleDate | 0..1 | date | Data sprzedaży. |
| dueDate | 0..1 | date | Termin płatności. |
| accountingDate | 0..1 | date | Data księgowania. |
| paymentAccount | 0..1 | Reference(BankAccount) | Rachunek płatności: identifier.value = numer rachunku, display = nazwa banku. |
| basedOn | 0..* | Reference | Dokumenty powiązane (korekta, oryginał przy poprawie). Pole informacyjne — księgowość wiąże korektę przez atrybut correction-document-number (§3b). |
| position | 0..* | PostingInstructionLine | Pozycje dokumentu. |
2a. Identyfikatory
Rodzaj identyfikatora niesie Identifier.system. Przestrzenie wewnętrzne mają postać urn:oid:1.2.616.1.113769.4.<instalacja>.<klucz>; faktyczne przestrzenie publikuje NamingSystem — zob. Identyfikacja i parametry wdrożenia.
| Przestrzeń (klucz) | Znaczenie | Identifier.system |
W POST |
W odczycie |
|---|---|---|---|---|
PostingInstruction.ExternalId |
Identyfikator zewnętrzny — id dokumentu nadany przez system wystawiający (klucz add-or-update) | …<instalacja>.91.2 |
wymagany — pierwszy identyfikator, którego system nie jest KSeF ani document-number |
tak |
| numer dokumentu | Numer dokumentu | https://api-erp.kamsoft.pl/vs/document-number |
wymagany | tak |
| numer KSeF | Numer KSeF | https://ksef.podatki.gov.pl |
opcjonalny | gdy nadany |
PostingInstruction.Id |
Id bufora dokumentu nadany przez księgowość (klucz referencyjny) | …<instalacja>.91 |
pomijany | tak; klucz postingInstruction w JournalEntry |
Brak identyfikatora zewnętrznego lub numeru dokumentu → 400 (§5a). Każdy identyfikator w zapisie niesie przestrzeń (identifier[].system) — bez niej żądanie kończy się 400, bo nie wiadomo, która instalacja ma zarejestrować dokument; wartość PostingInstruction.Id nadaje księgowość (rejestracja zasobu).
2b. Symbole
symbol to lista co najmniej dwu kodowań, po jednym z każdego słownika:
| Słownik | Znaczenie | Kody |
|---|---|---|
finance/posting-instruction-symbol |
Symbol bufora (rejestru dokumentów) w księgowości | nadaje wdrożenie |
finance/posting-instruction-document-symbol-type |
Rodzaj dokumentu (np. faktura, korekta) | nadaje wdrożenie |
POST odrzuca żądanie 400, gdy brakuje kodowania w którymkolwiek z tych systemów.
3. PostingInstructionLine (zagnieżdżony)
| Nazwa | Kard. | Typ | Opis |
|---|---|---|---|
| positionNo | 0..1 | integer | Numer pozycji (>= 1). |
| code | 0..1 | CodeableConcept | Typ pozycji: accounting-item (pozycja księgowa; domyślny, gdy brak) lub vat-summary (podsumowanie VAT). Słownik: posting-instruction-line-type. |
| value | 0..* | ValueItem | Lista wartości pozycji. Każdy element niesie type (słownik: posting-instruction-line-value-item-type) oraz jeden wariant wartości. Elementy bez rozpoznanego kodu type są w zapisie pomijane. |
| allocation | 0..1 | AllocationItem | Alokacja pozycji (jeden obiekt). |
| purchaseVatDeduction | 0..1 | CodeableConcept | Typ odliczenia VAT zakupu. Słownik: purchase-vat-deduction-type (full-deduction, no-deduction, structured-deduction, deduction-50-percent). |
| vatRate | 0..1 | CodeableConcept | Stawka VAT (pozycja vat-summary). Słownik: finance/vat-rate (23, 22, 8, 7, 5, 0, ZW, NP, OO). |
| description | 0..1 | string | Opis pozycji. |
| accountingVariant | 0..1 | Reference(AccountingVariant) | Wariant dekretacji na pozycji. |
Kody value[].type wg typu pozycji:
code pozycji |
Kod value[].type |
Wariant | Znaczenie |
|---|---|---|---|
accounting-item |
amount |
valueMoney |
Kwota pozycji |
accounting-item |
vat-amount |
valueMoney |
Kwota VAT pozycji |
accounting-item |
vat-amount-without-deductions |
valueMoney |
VAT niepodlegający odliczeniu |
accounting-item |
amount-not-earning-expense |
valueMoney |
Kwota niestanowiąca kosztu uzyskania przychodu |
accounting-item |
description |
valueString |
Opis (alternatywnie pole description) |
vat-summary |
net-amount |
valueMoney |
Netto dla stawki |
vat-summary |
vat-amount |
valueMoney |
VAT dla stawki |
3a. AllocationItem
| Nazwa | Kard. | Typ | Opis |
|---|---|---|---|
| type | 1..1 | CodeableConcept | Typ alokacji. Słownik: posting-instruction-allocation-item-type: cost-type (rodzaje kosztów), cost-center (ośrodki kosztów), assets-under-construction, sale-types. |
| formulaComponent | 0..1 | Reference(FormulaComponent) | Składnik formuły; identifier.value musi być liczbą całkowitą (id składnika) — inaczej 400. |
| costCarrier | 0..1 | Reference(CostCarrier) | Nośnik kosztów (identifier w przestrzeni CostCarrier.Id). |
| weight | 0..1 | number | Udział procentowy 0–100. |
| valueString | 0..1 | string | Wariant migracyjny: kody lub @symbol bez referencji. |
3b. Korekty i poprawa dokumentu
- Poprawa wcześniej wysłanego dokumentu — ponowny
POST /v1/posting-instructionsz tym samym identyfikatorem zewnętrznym (PostingInstruction.ExternalId). Endpoint działa jako add-or-update — nadpisuje istniejący bufor; odpowiedź 200 OK. - Korekta (odrębny dokument korygujący) — nowy
PostingInstructionz własnym identyfikatorem zewnętrznym, symbolem rodzaju dokumentu oznaczającym korektę (kodowanie wposting-instruction-document-symbol-type) oraz atrybutemcorrection-document-numberz numerem dokumentu korygowanego (§4). PolebasedOnnie jest interpretowane w zapisie.
4. Atrybuty
attribute[] (Attribute: code + value[]) w systemie posting-instruction-attribute-type; wartości jako valueString:
| Kod | Znaczenie |
|---|---|
split-payment |
Mechanizm podzielonej płatności (MPP) |
ksef-acquisition-date |
Data otrzymania w KSeF |
pz-document-number |
Numer dokumentu przyjęcia (PZ) |
correction-document-number |
Numer dokumentu korygowanego (dla korekt) |
vat-date |
Data VAT |
5. Systemy kodowania (value sety)
Value sety pól kodowanych PostingInstruction (przestrzeń https://api-erp.kamsoft.pl/vs/finance/...; rejestr: Systemy kodowania i value sety).
| Pole | Value set | Kody |
|---|---|---|
status |
posting-instruction-status |
ready-for-retrieval, retrieved, in-registration, deleted |
symbol |
posting-instruction-symbol, posting-instruction-document-symbol-type |
nadaje wdrożenie |
paymentMethod |
posting-instruction-payment-method |
cash, transfer, credit-card, other |
participant.function |
posting-instruction-participant-function |
seller, buyer, recipient, vat-group-member, subordinate-lgu |
attribute[].code |
posting-instruction-attribute-type |
§4 |
position.code |
posting-instruction-line-type |
accounting-item, vat-summary |
position.value[].type |
posting-instruction-line-value-item-type |
amount, net-amount, vat-amount, vat-amount-without-deductions, amount-not-earning-expense, description |
position.allocation.type |
posting-instruction-allocation-item-type |
cost-type, cost-center, assets-under-construction, sale-types |
position.purchaseVatDeduction |
purchase-vat-deduction-type |
full-deduction, no-deduction, structured-deduction, deduction-50-percent |
position.vatRate |
finance/vat-rate |
23, 22, 8, 7, 5, 0, ZW, NP, OO |
Przykłady użycia z konkretnymi kodami: PostingInstruction — przykłady.
5a. Reguły walidacyjne
Reguły sprawdzane przez API przy POST. Naruszenie skutkuje odpowiedzią 400 Problem Details (§5b).
| ID | Reguła |
|---|---|
pi-1 |
owner[] niesie identyfikator NIP (https://gov.pl/nip). |
pi-2 |
symbol niesie kodowanie w posting-instruction-symbol i w posting-instruction-document-symbol-type. |
pi-3 |
issueDate jest podane. |
pi-4 |
identifier niesie numer dokumentu (system = https://api-erp.kamsoft.pl/vs/document-number). |
pi-5 |
identifier niesie id dokumentu w systemie źródłowym (identyfikator o systemie innym niż KSeF i document-number). |
pi-6 |
position[].allocation.formulaComponent (gdy type = FormulaComponent) ma identifier.value będące liczbą całkowitą. |
pi-7 |
Kody status i paymentMethod, jeśli podane, pochodzą z odpowiednich słowników (§5). |
Pozostałe pola nie są walidowane przez API poza zgodnością ze schematem JSON.
5b. Operacje i parametry wyszukiwania
Instalację księgowości wyznacza profil zasobu, a gdy podano przestrzeń identyfikatora (identifier[].system) — ta przestrzeń (zakres żądania).
| Metoda | Ścieżka | Opis | Odpowiedź |
|---|---|---|---|
| POST | /v1/posting-instructions |
Przekazanie dokumentu do bufora księgowości; add-or-update po identyfikatorze zewnętrznym (§3b) | 200 OK z zapisanym zasobem (także dla nowego bufora); 400 przy naruszeniu §5a; 404, gdy księgowość nie zwróciła zapisanego dokumentu |
| GET | /v1/posting-instructions |
Wyszukiwanie buforów dokumentów | 200 OK: { "items": [...], "nextToken": null } |
Parametry GET (paginacja count, domyślnie 20, i offset, domyślnie 0):
| Parametr | Wymagany | Format | Opis |
|---|---|---|---|
identifier |
nie | system\|value |
Id w przestrzeni PostingInstruction.ExternalId lub PostingInstruction.Id |
symbol |
nie | system\|value |
Symbol bufora: https://api-erp.kamsoft.pl/vs/finance/posting-instruction-symbol\|<symbol> |
owner |
nie | system\|value |
Firma po NIP: https://gov.pl/nip\|<NIP> |
Błędy: naruszenie reguły z §5a lub błędny format parametru zwraca RFC 9457 Problem Details (technical-conventions, §9) ze statusem 400. Przykład — żądanie POST bez kodowania symbolu bufora:
{
"type": "https://httpstatuses.com/400",
"title": "Invalid request",
"status": 400,
"detail": "Missing required value: symbol (https://api-erp.kamsoft.pl/vs/finance/posting-instruction-symbol|value in body)."
}
5c. Wsparcie wdrożeniowe
Zakres faktycznie wspieranych interakcji, aktywnych value setów oraz systemy identyfikatorów z §2a wynikają z zakresu uzgodnionego w umowie oraz z parametrów wdrożenia przekazanych przez KAMSOFT — zob. Identyfikacja i parametry wdrożenia. Niniejsza strona opisuje model kanoniczny, nie możliwości konkretnej instalacji.
6. Odniesienia
- Invoice — model kanoniczny
- Register, AccountingVariant, FormulaComponent, CostCarrier
- JournalEntry — dekret powstały z instrukcji
- DocumentReference — bez udziału w dekretacji faktury
- Księgowanie — przegląd