SalesOrder
SalesOrder (zamówienie odbiorcy) to zasób reprezentujący zamówienie złożone przez odbiorcę na dostarczenie towarów lub usług. Zawiera identyfikatory, rodzaj (oferta / zamówienie), datę wystawienia, odbiorcę, pozycje zamówienia, wartość oraz status realizacji. Jest dokumentem źródłowym dla wydania magazynowego (InventoryDocument, movementType = issue) i faktury dla odbiorcy (Invoice). Identyfikacja przez Identifier, odbiorca przez PartyRole, pozycje przez strukturę zagnieżdżoną. Wzorowany na SAP (Sales Order, SO), UBL 2.3 (Order). Odpowiednik po stronie sprzedaży dla PurchaseOrder.
Rozszerza DomainResource. Zasób w standardzie Kamsoft.FAIR (Fast Adaptive Interoperable Resources).
1. Zakres i zastosowanie
SalesOrder = jeden dokument handlowy reprezentujący zamówienie od odbiorcy. Status realizacji nagłówka i pozycji oraz ilość zrealizowaną nadaje system prowadzący — API udostępnia je wyłącznie do odczytu.
Typowe scenariusze:
- przekazanie zamówienia odbiorcy z systemu zewnętrznego (sklep internetowy, system odbiorcy, CRM) do systemu prowadzącego,
- przekazanie oferty (
type=offer), która po akceptacji staje się zamówieniem, - korekta danych nagłówka lub pozycji przed realizacją (ilość, cena, termin dostawy),
- śledzenie statusu realizacji zamówienia i stopnia realizacji pozycji (
position[].fulfilledQuantity).
2. Zawartość (struktura)
Oprócz elementów DomainResource (id, resourceType, meta, owner[], comment, category[], status, type, contained[], attribute[]):
| Nazwa | Kard. | Typ | Opis |
|---|---|---|---|
| identifier | 0..* | Identifier | Identyfikatory zamówienia — §2a |
| issueDate | 0..1 | date | Data wystawienia zamówienia |
| party | 0..* | Reference(PartyRole) | Strony zamówienia: odbiorca (profil CustomerRole, role = customer); w POST wymagany |
| position | 0..* | SalesOrderPosition (§2b) | Pozycje zamówienia (towar, ilość, cena) |
| amount | 0..1 | Money | Kwota zamówienia (w odczycie wartość brutto) |
| expectedDeliveryDate | 0..1 | date | Oczekiwana data dostawy |
| relatedDocument | 0..* | Reference(InventoryDocument/Invoice) | Powiązane dokumenty — wydania magazynowe (movementType = issue) realizujące zamówienie/faktury; tylko do odczytu |
Pola dziedziczone istotne dla zamówienia:
| Nazwa | Kard. | Typ | Opis |
|---|---|---|---|
| type | 0..1 | CodeableConcept | Rodzaj dokumentu; słownik wholesale/sales-order-type (offer oferta, order zamówienie); w POST wymagany |
| status | 0..1 | CodeableConcept | Status realizacji zamówienia; słownik wholesale/sales-order-status (open otwarte, not-fulfilled niezrealizowane, part-fulfilled częściowo zrealizowane, fulfilled zrealizowane). Tylko do odczytu |
| attribute | 0..* | Attribute | code + value[]; system wholesale/sales-order-attribute-type: warehouse (valueReference → Location, magazyn / oddział realizujący zamówienie) |
| owner | 0..* | Reference(Party) | Firma prowadząca zamówienie (NIP, system https://gov.pl/nip) |
| meta | 0..1 | Meta | added (utworzenie), lastModified (modyfikacja), profile w zapisie |
2a. Identyfikatory
Rodzaj identyfikatora niesie Identifier.system — przestrzeń instalacji urn:oid:1.2.616.1.113769.4.<instalacja>.<klucz> publikowana jako NamingSystem — zob. Identyfikacja i parametry wdrożenia.
| Przestrzeń (klucz) | Znaczenie | Klucz referencyjny | Skąd system |
|---|---|---|---|
SalesOrder.Id |
Id zamówienia odbiorcy; używany w parametrze identifier operacji GET i PATCH |
tak | NamingSystem; urn:oid:1.2.616.1.113769.4.<instalacja>.<klucz> |
SalesOrder.Number |
Numer zamówienia (np. ZO/2026/001) |
nie | NamingSystem; urn:oid:1.2.616.1.113769.4.<instalacja>.<klucz>.1 |
2b. SalesOrderPosition
Pozycja zamówienia odbiorcy (referencja na produkt, ilość, cena). Pozycje są częścią zamówienia: nie mają własnego endpointu; w zapisie pozycję wskazuje positionNo.
| Nazwa | Kard. | Typ | Opis |
|---|---|---|---|
| positionNo | 0..1 | integer | Numer pozycji (od 1), unikalny w zamówieniu; w PATCH wskazuje pozycję do zmiany |
| product | 0..1 | Reference(ProductDefinition) | Produkt/usługa (identifier w przestrzeni ProductDefinition.Id); brak, gdy pozycja nie wskazuje asortymentu |
| name | 0..1 | string | Nazwa pozycji |
| description | 0..1 | string | Opis pozycji |
| quantity | 0..1 | Quantity | Ilość zamówiona (unit = nazwa jednostki) |
| fulfilledQuantity | 0..1 | Quantity | Ilość zrealizowana, może być częściowa. Tylko do odczytu |
| unitPrice | 0..1 | Money | Cena jednostkowa netto (currency = waluta zamówienia) |
| amount | 0..1 | Money | Wartość pozycji (w odczycie brutto, a gdy brak — netto × ilość) |
| vatRate | 0..1 | CodeableConcept | Stawka podatku VAT; słownik vat-rate |
| status | 0..1 | CodeableConcept | Status realizacji pozycji; słownik wholesale/sales-order-position-status (kody jak w statusie nagłówka). Tylko do odczytu |
| deliverySchedule | 0..* | DeliveryScheduleLine (date, quantity) |
Harmonogram dostaw |
| meta | 0..1 | Meta | Metadane pozycji (added, lastModified) |
3. Operacje i parametry wyszukiwania
| Metoda | Ścieżka | Opis |
|---|---|---|
| GET | /v1/sales-orders |
Wyszukiwanie zamówień odbiorców |
| POST | /v1/sales-orders |
Utworzenie zamówienia (nagłówek z pozycjami) |
| PATCH | /v1/sales-orders?identifier=system\|value |
Zmiana nagłówka i pozycji zamówienia |
Zgodnie z konwencjami technicznymi nie ma tras z {id} ani osobnych tras dla pozycji: zamówienie wskazuje parametr identifier, a pozycje są częścią treści zasobu.
3.1. Błędy
Błędny format parametru lub niepoprawna treść zapisu → 400 Problem Details (type = http://hl7.org/fhir/issue-type#invalid); przestrzeń identyfikatora spoza miejsca prawdy profilu → 404.
4. Zgodność z systemami ERP
| System | Odpowiednik | Uwagi |
|---|---|---|
| SAP | Sales Order (SO), tbl. VBAK (header) + VBAP (position) | SalesOrder = struktura VBAK/VBAP; status realizacji ≈ VBUK/VBUP |
| UBL 2.3 | Order | Wspólna struktura buyer, seller, lines |
| D365 | Sales Order, tbl. SalesTable (header) + SalesLine (lines) | Header + lines |
5. Odniesienia
- DomainResource, PartyRole, Party, Location
- ProductDefinition
- Identifier, CodeableConcept, Reference, Money, Quantity, Meta
- Attribute
- InventoryDocument — wydanie towaru (powiązanie z zamówieniem)
- Invoice — faktura dla odbiorcy
- PurchaseOrder — zamówienie zakupu (odpowiednik po stronie zakupu)