PurchaseOrder
PurchaseOrder (zamówienie zakupu) to zasób reprezentujący zamówienie do dostawcy na dostarczenie towarów lub usług. Zawiera identyfikatory, datę wystawienia, pozycje zamówienia, wartość oraz status. Jest dokumentem źródłowym dla przyjęcia magazynowego (InventoryDocument, movementType = receipt) i Invoice (faktura od dostawcy). Identyfikacja przez Identifier, strony przez PartyRole, pozycje przez specjalizowaną strukturę. Wzorowany na SAP (Purchase Order, PO), Oracle (Requisition + PO), UBL 2.3 (Order).
Rozszerza DomainResource. Zasób w standardzie Kamsoft.FAIR (Fast Adaptive Interoperable Resources).
1. Zakres i zastosowanie
PurchaseOrder = jeden dokument handlowy reprezentujący zamówienie u dostawcy. Przyjęcie towaru (GR) to w tym kanonie wyłącznie InventoryDocument z movementType = receipt, powiązany z PO przez relatedDocument / identifier[] — nie ma osobnego zasobu przyjęcia.
Zasób jest tylko do odczytu: API udostępnia zamówienia prowadzone w systemie magazynowym; status i stopień realizacji nadaje system źródłowy.
Jeden PurchaseOrder może prowadzić do wielu przyjęć magazynowych — wielokrotne dostawy. Każde przyjęcie referuje źródłowe zamówienie.
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: dostawca, inni uczestnicy |
| position | 0..* | PurchaseOrderPosition | Pozycje zamówienia (towar, ilość, cena) |
| amount | 0..1 | Money | Kwota zamówienia (w odczycie wartość brutto, PLN) |
| expectedDeliveryDate | 0..1 | date | Oczekiwana data dostawy |
| dueDate | 0..1 | date | Termin płatności |
| paymentTerms | 0..1 | CodeableConcept | Warunki płatności — kody nadaje wdrożenie |
| sourceDocument | 0..1 | Reference(PurchaseRequisition) | Dokument źródłowy — zapotrzebowanie |
| relatedDocument | 0..* | Reference(InventoryDocument) | Powiązane dokumenty (przyjęcie magazynowe) |
Pola dziedziczone istotne dla zamówienia:
| Nazwa | Kard. | Typ | Opis |
|---|---|---|---|
| type | 0..1 | CodeableConcept | Rodzaj dokumentu; słownik warehouse/document-type |
| status | 0..1 | CodeableConcept | Status zamówienia w systemie magazynowym; słownik warehouse/purchase-order-status (kody liczbowe, np. 1 nieprzekazane, 2 przekazane, 3 zrealizowane, 7 w trakcie realizacji, 8 w transporcie, 9 odrzucone) |
| attribute | 0..* | Attribute | code + value[]; system warehouse/purchase-order-attribute-type: order-fulfillment-step (stopień realizacji, tekst), warehouse (valueReference → Location) |
| meta | 0..1 | Meta | added (utworzenie), lastModified (modyfikacja) |
2a. Identyfikatory
| Przestrzeń (klucz) | Znaczenie | Klucz referencyjny | Skąd system |
|---|---|---|---|
PurchaseOrder.Id |
Id zamówienia zakupu | tak | NamingSystem; urn:oid:1.2.616.1.113769.4.<instalacja>.67 |
PurchaseOrder.Number |
Numer zamówienia | nie | NamingSystem; urn:oid:1.2.616.1.113769.4.<instalacja>.67.1 |
3. PurchaseOrderPosition
Pozycja w zamówieniu zakupu (referencja na produkt, ilość, cena).
| Nazwa | Kard. | Typ | Opis |
|---|---|---|---|
| positionNo | 0..1 | integer | Numer pozycji |
| product | 0..1 | Reference(ProductDefinition) | Produkt/usługa (identifier w przestrzeni ProductDefinition.Id); brak, gdy pozycja nie wskazuje asortymentu |
| description | 0..1 | string | Opis pozycji |
| quantity | 0..1 | Quantity | Ilość zamówiona (unit = nazwa jednostki) |
| unitPrice | 0..1 | Money | Cena jednostkowa netto |
| amount | 0..1 | Money | Wartość pozycji (w odczycie brutto, a gdy brak — netto × ilość) |
| status | 0..1 | CodeableConcept | Status pozycji; słownik warehouse/purchase-order-position-status (kody 1–5) |
| supplierProductId | 0..1 | string | Identyfikator produktu u dostawcy |
| deliverySchedule | 0..* | DeliveryScheduleLine (date, quantity) |
Harmonogram dostaw |
| name | 0..1 | string | Nazwa pozycji |
| vatRate | 0..1 | CodeableConcept | Stawka podatku VAT |
| meta | 0..1 | Meta | Metadane pozycji (added, lastModified) |
4. Operacje
| Metoda | Ścieżka | Opis |
|---|---|---|
| GET | /v1/purchase-orders |
Wyszukiwanie zamówień zakupu (tylko odczyt) |
Odpowiedź: { "items": [...], "nextToken": null }; paginacja count (domyślnie 20) i offset (domyślnie 0).
| Parametr | Wymagany | Format | Opis |
|---|---|---|---|
identifier |
nie | system\|value |
Id zamówienia w przestrzeni PurchaseOrder.Id |
status |
nie | system\|value |
https://api-erp.kamsoft.pl/vs/warehouse/purchase-order-status\|<kod> |
owner |
nie | system\|value |
Firma w przestrzeni Party.Id |
period |
nie | integer | Numer okresu rozliczeniowego systemu magazynowego (liczba, nie data) |
issueDateFrom, issueDateTo |
nie | date | Zakres dat wystawienia |
attribute |
nie | code\|value |
Filtry dodatkowe (kody nadaje wdrożenie) |
Błędny format parametru → 400 Problem Details (type = https://httpstatuses.com/400).
5. Relacje do pozostałych zasobów
- party[] → PartyRole → Party
- position[].product → ProductDefinition
- sourceDocument → PurchaseRequisition
- relatedDocument → InventoryDocument (przyjęcie na bazie zamówienia)
- attribute[].warehouse → Location (magazyn)
6. Zgodność z systemami wzorcowymi
| System | Odpowiednik | Uwagi |
|---|---|---|
| SAP | Purchase Order (PO), tbl. EKKO (header) + EKPO (position) | PurchaseOrder = EKKO/EKPO struktura |
| Oracle | Purchase Order (PO), tbl. PO_HEADERS_ALL + PO_LINES_ALL | Dokument źródłowy dla receipt |
| UBL 2.3 | Order | Wspólna struktura buyer, seller, lines |
| D365 | Purchase Order, tbl. PurchaseOrderEntity | Header + lines |
7. Przykład (odczyt)
{
"resourceType": "PurchaseOrder",
"meta": { "added": "2026-02-20T09:12:00", "lastModified": "2026-02-28T14:05:00" },
"identifier": [
{
"system": "urn:oid:1.2.616.1.113769.4.<instalacja>.67.1",
"value": "ZAM/2026/001"
},
{
"system": "urn:oid:1.2.616.1.113769.4.<instalacja>.67",
"value": "1587"
}
],
"status": {
"coding": [{ "system": "https://api-erp.kamsoft.pl/vs/warehouse/purchase-order-status", "code": "3", "display": "zrealizowane" }]
},
"issueDate": "2026-02-20",
"position": [
{
"positionNo": 1,
"product": {
"type": "ProductDefinition",
"identifier": { "system": "urn:oid:1.2.616.1.113769.4.<instalacja>.80", "value": "40213" }
},
"name": "Rękawice nitrylowe M",
"quantity": { "value": 100, "unit": "op." },
"unitPrice": { "value": 25.00, "currency": "PLN" },
"amount": { "value": 3075.00, "currency": "PLN" },
"status": {
"coding": [{ "system": "https://api-erp.kamsoft.pl/vs/warehouse/purchase-order-position-status", "code": "2" }]
}
}
],
"amount": { "value": 3075.00, "currency": "PLN" },
"attribute": [
{
"code": { "coding": [{ "system": "https://api-erp.kamsoft.pl/vs/warehouse/purchase-order-attribute-type", "code": "order-fulfillment-step" }] },
"value": [{ "valueString": "Zrealizowane" }]
},
{
"code": { "coding": [{ "system": "https://api-erp.kamsoft.pl/vs/warehouse/purchase-order-attribute-type", "code": "warehouse" }] },
"value": [{ "valueReference": { "type": "Location", "identifier": { "system": "urn:oid:1.2.616.1.113769.4.<instalacja>.75", "value": "12" } } }]
}
]
}
Przestrzenie OID w przykładach niosą placeholder <instalacja> — gotową przestrzeń przekazuje KAMSOFT w parametrach wdrożenia.
8. Odniesienia
- DomainResource, PartyRole, Party
- ProductDefinition
- Identifier, CodeableConcept, Reference, Money, Quantity
- Attribute
- InventoryDocument — przyjęcie towaru (powiązanie z zamówieniem)