Product
Product (egzemplarz produktu) to zasób reprezentujący konkretne, fizyczne wystąpienie pozycji katalogowej — na przykład określoną serię leku przyjętą do magazynu, pojedynczy serializowany wyrób medyczny lub jednostkę preparatu krwi. Zawiera referencję do ProductDefinition (definicja katalogowa) oraz identifier[] i attribute[] (Attribute) z danymi specyficznymi dla egzemplarza (numer partii, numer seryjny, data ważności, data produkcji, dane jednostki). Wzorowany na SAP (Batch / Serial Number przy Material), UBL 2.3 (ItemInstance), FHIR (Medication.batch, BiologicallyDerivedProduct).
Rozszerza DomainResource.
1. Rola i różnica względem ProductDefinition
Product i ProductDefinition reprezentują dwa różne poziomy abstrakcji w relacji typ – egzemplarz, a nie ten sam byt o różnym zestawie pól. Rozróżnienie jest niezbędne — nie jest optymalizacją ani duplikacją.
| Aspekt | ProductDefinition | Product |
|---|---|---|
| Zakres | Pozycja katalogowa (specyfikacja rodzaju) | Fizyczne wystąpienie rodzaju |
| Pytanie | Czym produkt jest | Którego konkretnego wystąpienia dotyczy operacja |
| Natura | Byt pojęciowy (wzorzec) | Byt fizyczny (istnieje w obrocie) |
| Liczność | Jedna na pozycję katalogu | Wiele (lub żadne) na definicję |
| Cykl życia | Stabilny; dane podstawowe (master data) | Operacyjny: przyjęcie → obrót → wydanie / utylizacja / wygaśnięcie |
| Tożsamość | Symbol katalogowy, GTIN | Numer partii, numer seryjny, identyfikator donacji |
| Zmienność | Rzadka (zmiana specyfikacji) | Stan zmienny w czasie (ilość, lokalizacja, status) |
Trzy przesłanki uzasadniają odrębność Product:
- Niezależny cykl życia. Definicja nie ulega zużyciu, nie wygasa i nie jest wycofywana z obrotu — te zdarzenia dotyczą wyłącznie egzemplarza. Operacje na rzeczy fizycznej (ruchy magazynowe, wygaśnięcie terminu ważności, wycofanie serii) wymagają bytu, do którego można je przypisać; definicja, współdzielona przez wszystkie egzemplarze, nie może pełnić tej funkcji.
- Referencyjność i identyfikowalność. Wycofanie z obrotu konkretnej serii, wydawanie według najkrótszego terminu ważności (FEFO), śledzenie opakowań w systemie NMVS oraz hemowigilancja jednostek krwi wymagają, aby dana partia lub sztuka była referowalnym bytem. Bez
Productmożliwe jest odwołanie wyłącznie do rodzaju produktu, nie do jego konkretnego wystąpienia. - Normalizacja danych. Specyfikacja katalogowa (np. ATC, postać, dawka, pozwolenie) jest zapisana jednokrotnie na definicji. Egzemplarze referują tę definicję i przenoszą wyłącznie dane dla nich unikalne (partia, termin ważności). Połączenie obu poziomów wymuszałoby powtórzenie pełnej specyfikacji na każdym egzemplarzu oraz groziło niespójnością przy zmianie specyfikacji.
2. Reżim śledzenia — kiedy powstaje egzemplarz
Istnienie zasobu Product zależy od wymaganej granularności śledzenia fizycznego wystąpienia (system product-tracking). Reżim wynika przede wszystkim z klasy produktu i profilu (klasyfikacja produktów).
| Reżim | Identyfikacja egzemplarza | Zastosowanie | Czy Product powstaje |
|---|---|---|---|
| none | brak — stan jest ilością definicji | usługi, towary nieśledzone | nie |
| batch | numer partii + termin ważności | leki, żywność, kosmetyki, odczynniki | tak |
| serial | unikalny identyfikator sztuki | wyroby serializowane, opakowania w NMVS | tak |
| unique | tożsamość jednostkowa (kliniczna) | preparaty krwi, tkanki | tak |
Reguła: Product jest tworzony wyłącznie wtedy, gdy proces biznesowy wymaga rozróżnienia i śledzenia konkretnego wystąpienia. W reżimie none dokumenty (zamówienie, faktura, pozycja) referują bezpośrednio ProductDefinition, a stan magazynowy wyrażany jest jako ilość definicji.
3. Zakres i zastosowanie
- Referencja do egzemplarza: przyjęcie/wydanie magazynowe z partią, seria w reklamacji, termin ważności na fakturze — pole valueReference pozycji wskazuje na
Product(referencja doProductDefinition+ dane partii/serii/ważności w atrybutach). - Referencja do definicji: zamówienie lub faktura na poziomie katalogu (bez śledzenia egzemplarza) — valueReference wskazuje na ProductDefinition.
Ceny egzemplarza (np. wycena partii) przenosi contained[] z elementem ProductPricing (lokalne id, bez identifier).
4. Zawartość (struktura)
Oprócz elementów DomainResource (id, meta, comment, category, status, type, contained, attribute):
| Nazwa | Kard. | Typ | Opis |
|---|---|---|---|
| productDefinition | 1..1 | Reference(ProductDefinition) | Definicja katalogowa, której egzemplarzem jest ten zasób |
| identifier | 0..* | Identifier | Identyfikatory egzemplarza (numer partii, numer seryjny, identyfikator donacji — rodzaj w type) |
| attribute | 0..* | Attribute | Cechy egzemplarza (batch-number, serial-number, expiry-date, production-date, dane jednostki); struktura w Attribute |
Uwaga: atrybuty egzemplarza używają tej samej struktury Attribute co definicja; code określa rodzaj cechy (system product-attribute-type). Daty wyraża się jako valueString (ISO 8601) lub valueCodeableConcept.
Kontrakty atrybutów egzemplarza dla klas śledzonych opisują profile definicji, w szczególności ProductDefinition — blood-product (dane jednostki: grupa ABO, Rh, identyfikator donacji, termin ważności).
5. Zgodność z systemami wzorcowymi
| System | Odpowiednik | Uwagi |
|---|---|---|
| SAP | Batch (Charge), Serial Number | Material + Batch/Serial; ProductDefinition = Material, Product = Batch/Serial |
| UBL 2.3 | ItemInstance, LotNumber, SerialID | Batch/serial przy Item; Product = egzemplarz Item |
| FHIR | Medication.batch, BiologicallyDerivedProduct | Definicja vs egzemplarz z partią/terminem ważności; jednostka kliniczna jako odrębny byt |
We wszystkich systemach wzorcowych poziom egzemplarza jest odrębny od poziomu definicji i opiera się na wspólnym mechanizmie partii/serii, a nie na osobnym modelu per rodzaj produktu.
6. Odniesienia
- ProductDefinition (definicja katalogowa, klasy produktu), ProductPricing (ceny w contained)
- DomainResource, Attribute (attribute[]), DocumentPosition (valueReference → Product lub ProductDefinition)
- Identifier, CodeableConcept, Reference
- Systemy kodowania —
product-tracking,product-attribute-type