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 GoodsReceipt (przyjęcie towaru) 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 z pakietu Kamsoft.FAIR (Fast Adaptive Interoperable Resources).


1. Zakres i zastosowanie

PurchaseOrder = jeden dokument handlowy reprezentujący propozycję kupienia od dostawcy. 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 GoodsReceipt (wielokrotne dostawy). Każdy GoodsReceipt 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 draft, pending, approved, partial, delivered, cancelled
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(Document) Zapotrzebowanie lub wniosek źródłowy
relatedDocument 0..* Reference(Document | GoodsReceipt) Powiązane dokumenty (GoodsReceipt, 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 pending, confirmed, partial, delivered, cancelled
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 → GoodsReceipt (sourceDocument = PO)
7. Invoice od dostawcy (sourceDocument = PO, matchuje GoodsReceipt)
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

  • party[0]PartyRole (Role: buyer) → Party (kupujący)
  • party[1]PartyRole (Role: supplier) → Party (dostawca)
  • position[].productProductDefinition
  • sourceDocument → Document (Requisition, jeśli istnieje)
  • relatedDocument → GoodsReceipt (stworzone na bazie PO), Amendment (zmiana PO)
  • attributeAttribute

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": "approved",
  "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 Suite - 1000 seats",
      "quantity": {
        "value": 1000,
        "unit": "seats"
      },
      "unitPrice": {
        "value": 50,
        "currency": "EUR"
      },
      "amount": {
        "value": 50000,
        "currency": "EUR"
      },
      "status": {
        "coding": [{
          "code": "pending"
        }]
      },
      "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