Plan: Modele HR/ZZL – struktura organizacyjna (OrganizationUnit, OrganizationAssignment)
Decyzja
Zgodnie z analizą innych systemów ERP wprowadzamy dwa nowe zasoby:
- OrganizationUnit – jednostka organizacyjna wewnątrz przedsiębiorstwa (komórka, dział, oddział).
- OrganizationAssignment – przypisanie pracownika do jednostki organizacyjnej (z okresem, stopniem hierarchii).
Party i PartyRole pozostają. Pion to rodzaj jednostki organizacyjnej (jak dział) – modelowany wyłącznie przez OrganizationUnit (type/category), bez osobnego pola w OrganizationAssignment.
1. OrganizationUnit (jednostka organizacyjna)
OrganizationUnit = jednostka organizacyjna wewnątrz przedsiębiorstwa: komórka, dział, oddział, z hierarchią (partOf), okresem funkcjonowania i opcjonalnie MPK. Kierownik/zastępca jednostki = OrganizationAssignment z hierarchyLevel (np. primary-manager, deputy).
1.1 Zakres
- Hierarchia jednostek: partOf (Reference OrganizationUnit).
- Identyfikacja: identifier (symbol, kod), name, skrócona nazwa (w name lub attribute).
- Okres funkcjonowania: period (0..1 Period) – od–do.
- Ośrodek kosztów / MPK: attribute[] (np. code=MPK, valueString/valueQuantity) lub characteristic.
- Status: status (active / inactive) z DomainResource.
- Opcjonalnie: type lub category (np. dział, oddział, pion – jeśli pion modelowany jako podtyp jednostki).
Rozszerza DomainResource.
1.2 Zgodność z systemami ERP
| System | Odpowiednik |
|---|---|
| SAP (OM) | Organizational Unit (O), struktura O |
| Oracle HCM | PER_ORGANIZATION_UNITS, HR_ORGANIZATION_UNITS |
| Workday | Organization (Cost Center, Department, etc.) |
| D365 HR | OMFunctionalArea, OMDepartment |
1.3 Struktura (propozycja pól)
| Pole | Kard. | Typ | Opis |
|---|---|---|---|
| identifier | 0..* | Identifier | Symbol/kod jednostki |
| name | 0..1 | string | Nazwa |
| partOf | 0..1 | Reference(OrganizationUnit) | Jednostka nadrzędna |
| period | 0..1 | Period | Okres funkcjonowania (od–do) |
| attribute | 0..* | Attribute | Np. MPK (ośrodek kosztów) |
(+ elementy DomainResource: id, meta, text, status, type, category, attribute.)
2. OrganizationAssignment (przypisanie do jednostki organizacyjnej)
OrganizationAssignment = przypisanie pracownika do jednostki organizacyjnej: kto (employee), do której jednostki (organizationalUnit), w jakim okresie, w jakim stopniu hierarchii (główny przełożony / zastępca); opcjonalnie powiązanie z Employment. Pion, dział, komórka = typy OrganizationUnit.
2.1 Zakres
- employee (1..1 Reference PartyRole) – pracownik.
- organizationalUnit (1..1 Reference OrganizationUnit) – jednostka organizacyjna (komórka, dział, pion itd.).
- period (0..1 Period) – początek/koniec pracy w tej jednostce.
- hierarchyLevel (0..1 CodeableConcept) – np. główny przełożony, zastępca (value set).
- employment (0..1 Reference Employment) – opcjonalne powiązanie z zatrudnieniem.
Rozszerza DomainResource.
2.2 Zgodność z systemami ERP
| System | Odpowiednik |
|---|---|
| SAP (OM/PA) | Assignment do Object (Org Unit), PA0001 w kontekście O |
| Oracle HCM | Assignment do Organization |
| Workday | Worker Assignment to Organization, Supervisory Organization |
2.3 Struktura (propozycja pól)
| Pole | Kard. | Typ | Opis |
|---|---|---|---|
| employee | 1..1 | Reference(PartyRole) | Pracownik |
| organizationalUnit | 1..1 | Reference(OrganizationUnit) | Jednostka organizacyjna |
| period | 0..1 | Period | Okres przypisania (praca w jednostce) |
| hierarchyLevel | 0..1 | CodeableConcept | Główny przełożony / zastępca |
| employment | 0..1 | Reference(Employment) | Powiązane zatrudnienie |
(+ elementy DomainResource.)
3. Relacje z istniejącymi modelami
- Party, PartyRole – bez zmian; employee to PartyRole. Kierownik jednostki = OrganizationAssignment (employee + organizationalUnit + hierarchyLevel).
- Employment – bez nowych pól; powiązanie z komórką przez OrganizationAssignment (OrganizationAssignment.employment → Employment).
- Position – stanowisko (slot); Employment.position → Position. OrganizationUnit to „komórka”, Position to „stanowisko”; jedno OrganizationUnit może mieć wiele Position (partOf lub rozszerzenie).
- Group – nie używany w tym kontekście. Pion = typ OrganizationUnit (organization-unit-type).
4. Kroki wdrożenia
- Dokumentacja zasobów
- Dodać docs/Resources/HR/OrganizationUnit.md – definicja, struktura, zgodność z SAP/Oracle/Workday.
-
Dodać docs/Resources/HR/OrganizationAssignment.md – definicja, struktura, zgodność.
-
README HR
-
W docs/Resources/HR/README.md dodać OrganizationUnit i OrganizationAssignment do tabeli zasobów i relacji.
-
Code systems
-
W docs/code-systems.md: hierarchy-level (główny przełożony, zastępca); organization-unit-type (w tym pion).
-
Przykłady
-
W docs/Examples: JSON OrganizationUnit (hierarchia komórek, period, MPK) oraz OrganizationAssignment (employee + organizationalUnit + period + hierarchyLevel – kierownik/zastępca).
-
OpenAPI / schemy
-
Dodać OrganizationUnit i OrganizationAssignment do specyfikacji kanonicznej (YAML/JSON) i skryptu generowania schematów.
-
Nawigacja
- W mkdocs.yml (katalog główny repozytorium) w sekcji HR dodać linki do OrganizationUnit i OrganizationAssignment.
5. Diagram relacji
flowchart TB
OU[OrganizationUnit\nidentifier, name, partOf, period\nattribute: MPK]
OA[OrganizationAssignment\nemployee, organizationalUnit, period\nhierarchyLevel, employment]
PR[PartyRole\nemployee]
E[Employment\nemployer, employee, position]
P[Position]
OU -->|partOf| OU
OA -->|employee| PR
OA -->|organizationalUnit| OU
OA -.->|employment| E
E -->|position| P