AttendanceCredential (karta RCP)
AttendanceCredential (karta RCP) to zasób reprezentujący nośnik identyfikacji pracownika w systemie rejestracji czasu pracy – kartę MIFARE, tag NFC, brelok proximity lub kod kreskowy. Posiadacz to PartyRole w roli pracownika (employee). Pracownik może mieć wiele nośników jednocześnie; co najwyżej jeden aktywny ma rolę primary i jego numer odpowiada polu ID_RCP w KS-ZZL.
Rozszerza DomainResource.
1. Zakres i zastosowanie
AttendanceCredential = jeden nośnik: employee (Reference PartyRole), identifier (id karty, numer karty, opcjonalnie kod kreskowy), technology, role, status, opcjonalnie validPeriod, issueDate, revocationDate.
- Rejestr kart – lista kart po pracowniku, roli lub statusie; eksport do systemu vendora RCP przed synchronizacją terminali.
- Identyfikacja zdarzenia – AttendanceRecord.credential wskazuje kartę, gdy vendor zna wyłącznie numer nośnika.
- Karta główna – numer karty
primaryjest wartościąID_RCPpracownika, widoczną na Party w przestrzeniParty.RcpId. Integracje oparte wyłącznie oID_RCPdziałają bez zmian.
Poza zakresem: kontrola dostępu fizycznego (strefy, uprawnienia do drzwi).
2. Zawartość (struktura)
Oprócz elementów DomainResource (id, resourceType, meta, owner, comment, category, status, type, contained, attribute):
| Nazwa | Kard. | Typ | Opis |
|---|---|---|---|
| identifier | 1..* | Identifier | Id karty, numer karty i kod kreskowy – przestrzenie w §2b |
| employee | 1..1 | Reference(PartyRole) | Pracownik – PartyRole (role=employee), identyfikator employee-{id} w przestrzeni PartyRole.Id |
| technology | 0..1 | CodeableConcept | Technologia nośnika – słownik hr/attendance-credential-technology: mifare, nfc, proximity, barcode, other |
| role | 1..1 | CodeableConcept | Rola karty – słownik hr/attendance-credential-role: primary, secondary |
| validPeriod | 0..1 | Period | Okres ważności; start i end jako data rrrr-mm-dd; brak end = okres otwarty |
| issueDate | 0..1 | string | Data wydania karty, rrrr-mm-dd |
| revocationDate | 0..1 | string | Data unieważnienia karty, rrrr-mm-dd |
Uwaga: status (z DomainResource) – słownik hr/attendance-credential-status: active, blocked. Przy zapisie opcjonalny. Wiązanie pola status nie jest zapisane w JSON Schema (pole pochodzi z DomainResource); walidacja należy do warstwy API.
Uwaga: pole id nie jest wypełniane – id karty w KS-ZZL zwracane jest w identifier (przestrzeń AttendanceCredential.Id). meta.lastModified pochodzi z daty ostatniej zmiany rekordu; dopóki zasób nie jest uzgodniony między systemami, meta.warning zawiera kod unreconciled (resource-warning).
Kody słownikowe przy zapisie są porównywane bez rozróżniania wielkości liter; dopuszczalny jest też kod podany wyłącznie w text.
2a. Operacje
GET /v1/attendance-credentials?employee=<przestrzeń PartyRole.Id>|employee-1001&status=https://api-erp.kamsoft.pl/vs/hr/attendance-credential-status|active&count=20&offset=0
| Parametr | Opis |
|---|---|
identifier |
Jedna para system\|wartość w przestrzeni AttendanceCredential.Id, AttendanceCredential.RcpId albo AttendanceCredential.Barcode |
employee |
Pracownik – para system\|wartość w przestrzeni PartyRole.Id (employee-{id}) |
status |
system\|kod ze słownika hr/attendance-credential-status |
role |
system\|kod ze słownika hr/attendance-credential-role |
count, offset |
Paginacja (domyślnie 20 / 0) |
Pojedynczą kartę odczytuje się przez ?identifier=<przestrzeń AttendanceCredential.Id>|<id> – API nie ma tras z {id}.
| Metoda | Ścieżka | Opis |
|---|---|---|
POST |
/v1/attendance-credentials |
Przypisanie nowej karty do pracownika. Wymagane: numer karty (AttendanceCredential.RcpId w identifier), employee, role. Druga aktywna karta primary pracownika → 422. |
PATCH |
/v1/attendance-credentials?identifier=<przestrzeń AttendanceCredential.Id>\|<id> |
Zmiana karty: status, role, validPeriod, technology, employee. Nieznana karta → 404. |
Odpowiedź zapisu: HTTP 200 z { "items": [ <AttendanceCredential> ] } (jeden obiekt). Odczyt: { "items": [...], "nextToken": null }. Błędy w formacie z konwencji technicznych: zły format pola lub parametru, brak pola wymaganego → 400; odmowa systemu prowadzącego → 422.
Zmiana karty głównej to dwa kroki: PATCH dotychczasowej karty na secondary, potem PATCH (albo POST) nowej z rolą primary. Kroki nie są atomowe – w odwrotnej kolejności drugi zapis kończy się 422. API nie ma operacji $set-primary.
2b. Identyfikatory
Przestrzenie wdrożeniowe urn:oid:1.2.616.1.113769.4.<instalacja>.<klucz> publikowane jako NamingSystem – zob. Identyfikacja i parametry wdrożenia.
| Przestrzeń (klucz) | Znaczenie | Klucz referencyjny | Skąd system |
|---|---|---|---|
AttendanceCredential.Id |
Id karty w KS-ZZL; nadaje system prowadzący | tak | NamingSystem |
AttendanceCredential.RcpId |
Numer karty (ID_RCP) – wymagany przy POST. Unikalny wśród kart aktywnych (status = active); karty zablokowane mogą powtarzać numer, więc wyszukiwanie ?identifier= może zwrócić kilka kart |
nie | NamingSystem |
AttendanceCredential.Barcode |
Kod kreskowy karty – opcjonalny, tylko razem z numerem karty | nie | NamingSystem |
3. Reguły i relacje
- employee wskazuje PartyRole w roli
employee– posiadaczem nośnika jest rola, nie osoba. - W danej chwili pracownik ma co najwyżej jedną aktywną kartę
primary; regułę pilnuje system prowadzący (druga →422). - Numer karty jest unikalny wśród kart aktywnych – w danej chwili tylko jedna karta
activema danyID_RCP. Numer może powtarzać się na kartach zablokowanych (np. karta zwrócona i wydana ponownie innemu pracownikowi). Dzięki temu numer karty jednoznacznie wskazuje pracownika przy imporcie zdarzeń. - Numer karty
primaryjest wartościąID_RCPpracownika – na Party w przestrzeniParty.RcpId. To relacja logiczna, nie referencja w JSON. - Karta
blockednie jest akceptowana przy imporcie zdarzeń – zdarzenie zostaje odrzucone (zob. AttendanceRecord). - AttendanceRecord.credential wskazuje ten zasób; w odpowiedzi API uzupełnia kartę pracownika, nawet gdy nadawca jej nie podał.
- Między kartą a AttendanceTerminal nie ma referencji – wiąże je dopiero AttendanceRecord.
4. Odniesienia
- DomainResource, PartyRole (employee), Party (
Party.RcpId) - AttendanceRecord (credential), AttendanceTerminal
- Identifier, CodeableConcept, Reference, Period
- Time & Attendance – przykłady, code-systems