Przejdź do treści

PurchaseOrder

PurchaseOrder (zamówienie zakupu) to zasób reprezentujący request do dostawcy na dostarczenie towarów lub usług. Zawiera informacje o kupującym, dostawcy, pozycjach zamówienia, wartości oraz statusie. 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 propozycję kupienia od dostawcy. Goods receipt (GR) w P2P to w tym kanonie wyłącznie InventoryDocument z movementType = receipt, powiązany z PO przez relatedDocument / identifier[] — nie ma osobnego zasobu GoodsReceipt.

Cykl życia: - draft → zatwierdzenie wewnętrzne - pending → oczekiwanie na potwierdę dostawcy
- approved → akceptacja dostawcy - partial → częściowa dostawa - delivered → pełna dostawa (koniec) - cancelled → anulowanie

Jeden PurchaseOrder może prowadzić do wielu przyjęć magazynowych (InventoryDocument z przyjęciem) — wielokrotne dostawy. Każde przyjęcie referuje źródłowy PO.


2. Zawartość (struktura)

Oprócz elementów DomainResource (id, meta, text, comment, category, status, type, contained, attribute):

Nazwa Kard. Typ Opis
identifier 1..* Identifier Numer zamówienia (np. PO-2026-001); system = uuid firmy, value = numer
issueDate 1..1 date Data wystawienia zamówienia
party 2..* Reference(PartyRole) [0] = kupujący (Role: buyer), [1] = dostawca (Role: supplier)
position 1..* PurchaseOrderPosition Pozycje zamówienia (towar, ilość, cena)
amount 1..1 Money Całkowita wartość netto (suma pozycji)
status 1..1 CodeableConcept Status workflow (np. draft, pending, approved, partial, delivered, cancelled); przy imporcie z systemu magazynowego źródłowego stosować kody z ValueSet purchase-order-status
realizationStep 0..1 CodeableConcept Stopień realizacji zamówienia (niezrealizowane / częściowo / zrealizowane) — osobno od status; ValueSet purchase-order-realization-step
expectedDeliveryDate 0..1 date Oczekiwana data dostawy
dueDate 0..1 date Termin płatności (dla PO z warunkami płatności)
paymentTerms 0..1 CodeableConcept Net 30, Net 60, Prepay, COD (system: payment-terms)
sourceDocument 0..1 Reference(PurchaseRequisition) Dokument źródłowy — zapotrzebowanie (PR). Nie używać ogólnego Document, jeśli istnieje zasób domenowy (tu: PurchaseRequisition).
relatedDocument 0..* Reference(Document | InventoryDocument) Powiązane dokumenty (przyjęcie magazynowe, Amendment)
attribute 0..* Attribute Dodatkowe atrybuty (np. total-tax, discount-total)

3. PurchaseOrderPosition

Pozycja w zamówieniu zakupu (referencja na produkt, ilość, cena).

Nazwa Kard. Typ Opis
positionNo 1..1 integer Numer pozycji (1, 2, 3, …)
product 1..1 Reference(ProductDefinition) Produkty/usługa
description 0..1 string Opis towaru (jeśli różny od ProductDefinition.name)
quantity 1..1 Quantity Ilość zamawianego towaru
unitPrice 1..1 Money Cena jednostkowa netto
amount 1..1 Money Wartość netto pozycji (quantity × unitPrice)
status 0..1 CodeableConcept Etap realizacji pozycji; przy imporcie z systemu magazynowego źródłowego ValueSet purchase-order-position-status
supplierProductId 0..1 string Numer artykułu u dostawcy (SKU)
deliverySchedule 0..* DeliveryScheduleLine Harmonogram dostaw (dla zamówień wieloetapowych)

4. Przepływ biznesowy

1. Pracownik pionu tworzy PurchaseOrder (status=draft)
2. System routuje na zatwierdzenie RBAC 
   - < €5.000:        Kierownik pionu (Duty: approve-purchase-small)
   - €5.000–€50.000:  Kierownik finansowy (Duty: approve-purchase-medium)
   - > €50.000:       CFO (Duty: approve-purchase-large)
3. Po zatwierdzeniu status → pending
4. Wysłanie do dostawcy (e-mail, EDI, portal)
5. Dostawca potwierdza → status → approved
6. Dostarczenie towaru → **InventoryDocument** (przyjęcie, `relatedDocument` → PO)
7. Invoice od dostawcy (powiązanie z PO i przyjęciem magazynowym)
8. Status → delivered (po kompletnej dostawie)

5. Wymagania prawne

Kodeks Handlowy (ustawa o ochronie konkurencji i konsumentów): - PurchaseOrder stanowi ofertę (zmiana oferty wymaga potwierdzenia stron) - Zmiana warunków PO po zatwierdzeniu wymaga Amendment

Audit trail (dla firm zarządzających bezpieczeństwem zasobów): - Każda zmiana: kto, kiedy, co zmieniono (historia w extended resourceHistory)

Procurment Controls (COSO, SOX-equivalent dla ERP): - Zatwierdzające mogą jedynie osoby z przydzieloną Duty/Capability (RBAC) - Kwotowe limity (approval authority matrix)


6. Relacje do pozostałych zasobów


7. 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, workflow approval

8. Przykład

{
  "resourceType": "PurchaseOrder",
  "id": "po-2026-001",
  "identifier": [
    {
      "system": "urn:uuid:kamsoft-erp",
      "value": "PO-2026-001"
    }
  ],
  "type": {
    "coding": [{
      "system": "https://api-erp.kamsoft.pl/ns/document-type",
      "code": "purchase-order"
    }]
  },
  "status": {
    "coding": [{
      "system": "https://api-erp.kamsoft.pl/ns/purchase-order-status",
      "code": "3",
      "display": "zrealizowane"
    }]
  },
  "realizationStep": {
    "coding": [{
      "system": "https://api-erp.kamsoft.pl/ns/purchase-order-realization-step",
      "code": "3",
      "display": "Zrealizowane"
    }]
  },
  "issueDate": "2026-02-20",
  "expectedDeliveryDate": "2026-02-28",
  "party": [
    {
      "reference": "PartyRole/role-buyer-kamsoft",
      "display": "KAMSOFT sp. z o.o. (Buyer)"
    },
    {
      "reference": "PartyRole/role-supplier-techsupply",
      "display": "TechSupply Ltd (Supplier)"
    }
  ],
  "position": [
    {
      "positionNo": 1,
      "product": {
        "reference": "ProductDefinition/soft-lic-001",
        "display": "Software License (annual subscription)"
      },
      "description": "Business Intelligence Package - 1000 seats",
      "quantity": {
        "value": 1000,
        "unit": "seats"
      },
      "unitPrice": {
        "value": 50,
        "currency": "EUR"
      },
      "amount": {
        "value": 50000,
        "currency": "EUR"
      },
      "status": {
        "coding": [{
          "system": "https://api-erp.kamsoft.pl/ns/purchase-order-position-status",
          "code": "2",
          "display": "Przyjęte"
        }]
      },
      "supplierProductId": "BILS-1000-SEAT"
    }
  ],
  "amount": {
    "value": 50000,
    "currency": "EUR"
  },
  "paymentTerms": {
    "coding": [{
      "system": "https://api-erp.kamsoft.pl/ns/payment-terms",
      "code": "net-30"
    }]
  }
}

9. Odniesienia