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)
name 0..1 string Nazwa pozycji
vatRate 0..1 CodeableConcept Stawka podatku VAT
meta 0..1 Meta Metadane pozycji

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/vs/document-type",
      "code": "purchase-order"
    }]
  },
  "status": {
    "coding": [{
      "system": "https://api-erp.kamsoft.pl/vs/purchase-order-status",
      "code": "3",
      "display": "zrealizowane"
    }]
  },
  "realizationStep": {
    "coding": [{
      "system": "https://api-erp.kamsoft.pl/vs/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/vs/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/vs/payment-terms",
      "code": "net-30"
    }]
  }
}

9. Odniesienia