Przejdź do treści

CostAssignment

CostAssignment (przypisanie kosztów) to zasób reprezentujący alokację kosztów z dokumentów, zapisów księgowych, produktów i stron na nośnik kosztów (CostCarrier). Pozwala na rozdzielenie kosztów między projekty, zlecenia, centra kosztów i produkty bez modyfikacji źródłowych zasobów (Document, LedgerEntry, Product, Party). Każde przypisanie zawiera position[] – listę pozycji, gdzie każda wskazuje źródło kosztu (resource) i wartość (valueMoney lub valueQuantity). Wzorowany na SAP (Cost Assignment COEP), Oracle (Cost Allocation), Dynamics 365 (Cost Distribution).

Rozszerza DomainResource.


1. Zakres i zastosowanie

CostAssignment = dokument alokacyjny przypisujący koszty do CostCarrier. Źródła kosztów (osie alokacji):

  • Document – faktura, dekret, zamówienie, dokument wydania (kwota faktury, koszt pozycji)
  • LedgerEntry – zapis księgowy, np. z listy płac (koszt rozliczony na projekt)
  • Product – produkt/instancja (koszt materiałowy, koszt przygotowania)
  • ProductDefinition – definicja produktu (koszt standardowy)
  • Party – kontrahent/dostawca (koszt usługi, outsourcing)
  • Location – lokalizacja/magazyn (koszt eksploatacji)

Każde przypisanie zawiera referencję do costCarrier (1..1 CostCarrier – cel alokacji) oraz position[] (lista pozycji): - positionNo – numer pozycji (1, 2, 3...) - type – rodzaj kosztu (invoice-cost, material-cost, labor-cost, overhead-cost – CodeableConcept) - resource – źródło (Reference do Document, LedgerEntry, Product itp.) - value – wartość (Money lub Quantity, ale nie oba jednocześnie)

Brak bezpośredniego wpływu na źródłowe zasoby – CostAssignment nie modyfikuje Document, LedgerEntry, Product czy Party. Jest samodzielnym dokumentem alokacyjnym, który można cofnąć (status=reversed) bez wpływu na oryginalny dokument.


2. Zawartość (struktura)

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

Nazwa Kard. Typ Opis
identifier 0..* Identifier Identyfikatory alokacji (numer dokumentu alokacyjnego, numer w systemie źródłowym – rodzaj w type)
costCarrier 1..1 Reference(CostCarrier) Nośnik kosztów – cel alokacji (projekt, zlecenie, centrum kosztów); musi być zawsze podany
date 0..1 date Data alokacji (Data księgowania alokacji)
period 0..1 Period Okres alokacji (start/end) – dla alokacji okresowych (miesięczne rozliczenia, budżet), opcjonalnie
status 0..1 CodeableConcept Status alokacji: draft (projekt), posted (zaksięgowana), reversed (cofnięta) (system https://api-erp.kamsoft.pl/ns/status)
position 0..* CoA Position (typ zagnieżdżony) Lista pozycji alokacji – każda wskazuje źródło kosztu i wartość; co najmniej jedna pozycja wymagana w alokacji opublikowanej

2a. Struktura position[] (zagnieżdżony typ pozycji)

Nazwa Kard. Typ Opis
positionNo 1..1 integer Numer pozycji w alokacji (1, 2, 3...) – unikalny w ramach CostAssignment; numeracja od 1
type 1..1 CodeableConcept Typ/rodzaj kosztu: invoice-cost (koszt z faktury), material-cost (koszt materiałowy), labor-cost (koszt pracy), overhead-cost (koszt pośredni), allocation (alokacja międzyokresowa) – system https://api-erp.kamsoft.pl/ns/cost-assignment-position-type
resource 1..1 Reference(DomainResource) Źródło kosztu: Document, Product, ProductDefinition, Party, Location – każde pole type opcjonalnie określa typ zasobu
valueMoney 0..1 Money Kwota kosztu (value + currency, np. PLN, EUR) – jedno z valueMoney lub valueQuantity, nie oba
valueQuantity 0..1 Quantity Ilość kosztu (value + unit, np. h – roboczogodziny, szt. – sztuki, kg – kilogramy) – jedno z valueMoney lub valueQuantity, nie oba

Uwaga: Każda pozycja – dokładnie jedno z valueMoney lub valueQuantity – kwota pieniężna ALBO ilość, nie oba jednocześnie. Jeśli nazwa wymaga zarówno kwoty, jak i ilości (np. 100 szt. po 50 PLN), należy rozdzielić na dwie pozycje albo uzupełnić drugą wartość w attribute (profil). Pole resource zawiera referencję do dowolnego zasobu (DomainResource lub jego podtypu); type pozycji (invoice-cost, material-cost itp.) określa, jakie pole zasobu odnosi się do kosztu.


3. Struktura position[] — detale i przykłady

Pozycja alokacji (CoA Position) to kluczowy element CostAssignment. Przykłady użycia:

Typ resource valueMoney valueQuantity Opis
invoice-cost Document (faktura) 50000 PLN Całość faktury przypisana na projekt
material-cost Product (materiał) 100 szt Ilość materiału zużytego (wartość ustala się osobno)
material-cost Product (materiał) 15000 PLN Koszt materiałowy (bez ilości)
labor-cost LedgerEntry (z Payroll) 200 h Roboczogodziny pracowników przypisane na projekt (koszt jednostkowy ustala się osobno lub w attribute)
labor-cost LedgerEntry (z Payroll) 75000 PLN Całkowity koszt wynagrodzeń przypisany na zlecenie
overhead-cost LedgerEntry (koszty ogólne) 5000 PLN Koszty pośrednie rozliczane na produkt

Conventions: - invoice-cost + Document: valueMoney – całkowita kwota faktury lub jej pozycji - material-cost + Product: valueQuantity (ilość, jednostka) LUB valueMoney (wartość); jeśli oba, rozdzielić na 2 pozycje - labor-cost + LedgerEntry: valueQuantity (godziny, dni) LUB valueMoney (kwota wynagrodzeń) - overhead-cost + LedgerEntry: valueMoney (kwota kosztów pośrednich do rozliczenia)


4. Związek z Document i LedgerEntry

CostAssignment nie zawiera pól sourceDocument/sourcePositionNo. Zamiast tego:

  • CostAssignment.position[].resource zawiera bezpośrednią referencję do dokumentu (Document, LedgerEntry, itp.)
  • Jeśli alokacja pochodzi z konkretnej pozycji dokumentu, należy przechować identyfikator tej pozycji w attribute (profil) lub w valueString (uwagi)

Przykład: Alokacja dotycząca wiersza faktury:

{
  "positionNo": 1,
  "type": { "coding": [{ "code": "invoice-cost" }] },
  "resource": { "reference": "Document/invoice-2026-123", "display": "FV/2026/123" },
  "valueMoney": { "value": 25000, "currency": "PLN" },
  "attribute": [
    { "url": "https://api-erp.kamsoft.pl/ns/ext/source-position", "valueInteger": 2 }
    // pozycja numer 2 w dokumencie (DocumentPosition.positionNo=2)
  ]
}


5. Zgodność z systemami wzorcowymi

System Odpowiednik Uwagi
SAP Cost Assignment documents (COEP: Actual posting, CO03), Allocation documents (Manual allocation) CostAssignment=COEP record; costCarrier=Cost Center/Internal Order; position[]=line items per source document
Oracle Cost Allocation, Accruals CostAssignment=allocation rule or manual entry; Oracle używa Journal Entry z Cost Center segment; mapping na currency amounts
Dynamics 365 Cost Allocation, Distribution CostAssignment=manual cost allocation; Financial Dimension tracking; position[]=allocation lines per source
Workday Cost Distribution, Work Tag Assignment CostAssignment=distribution entry; costCarrier=Cost Center/Project; tracing through Worktags

6. Odniesienia