Attribute
Attribute (atrybut) to typ danych oznaczający cechę opisaną kodem (rodzaj) i wartością – np. jednostka miary, stawka VAT, kolor, numer partii, data ważności. Używany w ProductDefinition (cechy definicji: jednostka, VAT, producent, grupa), Product (cechy instancji: batch-number, serial-number, expiry-date), Document (attribute[] – atrybuty dokumentu, np. podsumowanie pozycji: suma netto, VAT, brutto) oraz Location (attribute[] – cechy lokalizacji: powierzchnia, temperatura, typ strefy). Jedna struktura: code (rodzaj atrybutu) + jedno z pól value* (Quantity, Money, CodeableConcept, Reference, string lub valueItem – lista wartości dowolnego typu). Wzorowany na podejściu code + value[x] z FHIR (Observation.component).
Attribute nie jest zasobem (DomainResource) – jest typem zagnieżdżonym w tablicy attribute[] w ProductDefinition, Product, Document i Location. W sensie DDD to Value Object: brak własnej identyfikacji (id), tożsamość wyłącznie przez wartość (code + value*), zagnieżdżenie w rodzicu.
1. Zakres i zastosowanie
Attribute służy do:
- Cech definicji produktu – w ProductDefinition: unit-of-measure, vat-rate, color, size, training-duration, producer, product-group (code + valueCodeableConcept, Quantity dla ilości/miar, Money dla kwot, Reference).
- Cech instancji produktu – w Product: batch-number, serial-number, expiry-date, production-date, location (code + valueString, valueCodeableConcept lub valueReference).
- Atrybuty dokumentu – w Document (attribute[]): np. podsumowanie pozycji faktury – total-net, total-vat, total-gross (code + valueMoney); system np.
https://api-erp.kamsoft.pl/ns/document-attribute-type. - Cechy lokalizacji – w Location (attribute[]): np. powierzchnia (valueQuantity), temperatura, typ strefy (valueCodeableConcept); system np.
https://api-erp.kamsoft.pl/ns/location-attribute-type. - Rozszerzalności – nowe rodzaje atrybutów przez code (system zależny od zasobu: product-attribute-type, document-attribute-type, location-attribute-type) bez zmiany struktury.
Reguła: code (1..1) określa rodzaj cechy; przynajmniej jedno z pól value* powinno być ustawione. Dla ilości/miary (niepieniężnej) – valueQuantity; dla kwoty pieniężnej – valueMoney; dla wielu wartości dowolnego typu (w tym Quantity/Money z opcjonalnym type) – valueItem; dla kodu/słownika – valueCodeableConcept; dla referencji – valueReference; dla tekstu/daty – valueString.
2. Zawartość (struktura)
| Nazwa | Kard. | Typ | Opis |
|---|---|---|---|
| code | 1..1 | CodeableConcept | Rodzaj atrybutu (unit-of-measure, vat-rate, color, batch-number, expiry-date, producer… – system https://api-erp.kamsoft.pl/ns/product-attribute-type) |
| valueQuantity | 0..1 | Quantity | Jedna wartość niepieniężna (czas trwania, waga, ilość – UCUM) |
| valueMoney | 0..1 | Money | Jedna kwota pieniężna (np. cena, limit); dla walut używać Money |
| valueItem | 0..* | AttributeValueItem | Wiele wartości; każdy element – jeden typ (valueBoolean, valueString, valueQuantity, valueMoney, valueCodeableConcept, valueReference…); opcjonalnie type (CodeableConcept) dla Quantity/Money (np. net/gross) |
| valueCodeableConcept | 0..* | CodeableConcept | Wartość kodowana (np. stawka VAT 23%, kolor, kategoria) |
| valueReference | 0..* | Reference | Odniesienie (np. producent → Party) |
| valueString | 0..1 | string | Tekst lub data w formacie tekstowym (np. numer partii, data ważności ISO 8601) |
AttributeValueItem (jeden element valueItem): w każdym elemencie dokładnie jedno z pól value + opcjonalnie type*:
| Nazwa | Kard. | Typ | Opis |
|---|---|---|---|
| type | 0..1 | CodeableConcept | Rodzaj wartości (np. net, gross) – sensowne przy valueQuantity/valueMoney |
| valueBoolean | 0..1 | boolean | Wartość logiczna |
| valueString | 0..1 | string | Tekst lub data (np. ISO 8601) |
| valueInteger | 0..1 | integer | Liczba całkowita |
| valueQuantity | 0..1 | Quantity | Ilość / miara (UCUM) |
| valueMoney | 0..1 | Money | Kwota pieniężna |
| valueCodeableConcept | 0..1 | CodeableConcept | Wartość kodowana |
| valueReference | 0..1 | Reference | Odniesienie |
Reguła: przynajmniej jedno pole value (valueQuantity, valueMoney, valueItem, valueCodeableConcept, valueReference, valueString) powinno być ustawione. Dla dat (expiry-date, production-date) często używa się valueString (ISO 8601) lub valueCodeableConcept*; rozszerzenie może dodać valueDate.
3. Przykłady code (system zależny od zasobu)
- ProductDefinition: unit-of-measure, vat-rate, color, size, training-duration, producer, product-group (system product-attribute-type).
- Product (instancja): batch-number, serial-number, expiry-date, production-date, location (system product-attribute-type).
4. Zgodność atrybutów z systemami ERP
Model atrybutów (code + value* / valueItem) pozwala uzupełnić dane z systemów ERP i odwrotnie – bez utraty informacji.
| System | Odpowiednik cech | Mapowanie |
|---|---|---|
| SAP | Characteristic (CLASS), Batch (Charge), Serial Number; Material master – jednostka, grupa, VAT | code → Char. name / tabela; valueQuantity/valueMoney/valueString → wartość; valueReference → np. producent (Vendor/BP); batch-number, expiry-date w Product.attribute |
| Oracle EBS / Fusion | Descriptive Flexfields (DFF), Item Attributes; Lot/Serial; UOM, Category, VAT | code → DFF segment / Item Attribute; value* → wartość; valueItem → wiele wartości z type (np. net/gross); Product.attribute → Lot/Serial attributes |
| UBL 2.3 | Item Property (Name, Value); ClassifiedTaxCategory; AdditionalItemProperty | code → Item Property name; valueString/valueCodeableConcept/valueQuantity → Value; Batch/Serial w ItemInstance |
| OAGIS | Item IDs, Quantity, Amount, Classification; Lot/Serial w BOD | code → Classification/Property; value* → wartość; ProductDefinition.attribute ↔ Item master; Product.attribute ↔ Lot/Serial |
| FHIR | Observation.component (code + value[x]); Medication (batch, expirationDate) | Bezpośrednie: code + valueQuantity, valueCodeableConcept, valueString, valueReference; valueItem = wiele componentów w jednym atrybucie |
Podsumowanie: Ten sam zestaw danych (jednostka, VAT, partia, seria, data ważności, producent, grupa, cechy niestandardowe) da się wyrazić w naszym modelu i w SAP/Oracle/UBL/OAGIS. Różnice dotyczą nazewnictwa (code/system) i miejsca przechowania (Material vs Item vs Batch) – mapowanie jest możliwe w obie strony; atrybuty pozwalają uzupełnić dane z ERP (import do API) i eksportować do ERP (export z API).
5. Odniesienia
- ProductDefinition (attribute[]), Product (attribute[])
- CodeableConcept, Quantity, Money, Reference