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
- DomainResource, CostCarrier (CostAssignment.costCarrier), Document, Product, ProductDefinition, Party, Location
- Identifier, CodeableConcept, Reference, Money, Quantity, Period