Przejdź do treści

Przykład: Struktura organizacyjna (zarząd → wydziały → zakłady → sekcje)

Przykład modeluje pełną hierarchię organizacyjną: zarząd → wydziały → zakłady → sekcje. Kierownik, zastępca i dyrektorzy są wyłącznie w OrganizationAssignment przez pole hierarchyLevel (np. primary-manager, deputy, main-director, technical-director). OrganizationUnit nie ma pola manager – kto kieruje jednostką wynika z przypisań z odpowiednim hierarchyLevel.

Użyte modele: Party, PartyRole, OrganizationUnit, OrganizationAssignment, Employment, Position. System kodów: https://api-erp.kamsoft.pl/ns/.


1. Hierarchia jednostek (schemat)

Zarząd (board)
├── Wydział Produkcji (department)
│   ├── Dyrektor główny: Anna Nowak (OrganizationAssignment, hierarchyLevel=main-director)
│   ├── Dyrektor techniczny: Michał Nowicki (OrganizationAssignment, hierarchyLevel=technical-director)
│   └── Zakład 1 (plant), kierownik: Maria Wiśniewska (OrganizationAssignment, hierarchyLevel=primary-manager)
│       ├── Sekcja A (section), kierownik: Tomasz Lewandowski (OrganizationAssignment, hierarchyLevel=primary-manager)
│       └── Sekcja B (section), kierownik: Katarzyna Dąbrowska (OrganizationAssignment, hierarchyLevel=primary-manager)
└── Wydział Sprzedaży (department)
    └── Zakład 2 (plant), kierownik: Jan Zieliński (OrganizationAssignment, hierarchyLevel=primary-manager)

2. Pracodawca (Party + PartyRole)

Firma „Produkt Plus” – pracodawca (Party typu organization, PartyRole role=employer).

{
  "resourceType": "Party",
  "id": "party-firma",
  "meta": { "lastModified": "2025-02-20T10:00:00Z" },
  "identifier": [
    { "system": "urn:pl:nip", "value": "1234567890" },
    { "system": "https://api-erp.kamsoft.pl/ns/company", "value": "FIRMA-01" }
  ],
  "name": "Produkt Plus Sp. z o.o.",
  "type": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/party-type", "code": "organization", "display": "Organizacja" }] },
  "status": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/status", "code": "active" }] }
}
{
  "resourceType": "PartyRole",
  "id": "role-firma-employer",
  "meta": { "lastModified": "2025-02-20T10:00:00Z" },
  "party": { "reference": "Party/party-firma", "display": "Produkt Plus Sp. z o.o." },
  "role": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/party-role", "code": "employer", "display": "Pracodawca" }] },
  "status": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/status", "code": "active" }] }
}

3. Pracownicy (Party + PartyRole employee)

Sześciu pracowników: Anna Nowak, Michał Nowicki, Maria Wiśniewska, Tomasz Lewandowski, Katarzyna Dąbrowska, Jan Zieliński.

{
  "resourceType": "Party",
  "id": "party-anna-nowak",
  "meta": { "lastModified": "2025-02-20T10:00:00Z" },
  "identifier": [{ "system": "https://api-erp.kamsoft.pl/ns/company", "value": "PRAC-001" }],
  "name": "Anna Nowak",
  "type": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/party-type", "code": "person", "display": "Osoba" }] },
  "status": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/status", "code": "active" }] }
}
{
  "resourceType": "PartyRole",
  "id": "role-anna-nowak-employee",
  "party": { "reference": "Party/party-anna-nowak", "display": "Anna Nowak" },
  "role": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/party-role", "code": "employee", "display": "Pracownik" }] },
  "status": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/status", "code": "active" }] }
}

Analogicznie definiuje się Party i PartyRole (role=employee) dla: Michał Nowicki (PRAC-002), Maria Wiśniewska (PRAC-003), Tomasz Lewandowski (PRAC-004), Katarzyna Dąbrowska (PRAC-005), Jan Zieliński (PRAC-006). Identyfikatory PartyRole: role-michal-nowicki-employee, role-maria-wisniewska-employee, role-tomasz-lewandowski-employee, role-katarzyna-dabrowska-employee, role-jan-zielinski-employee.


4. Zatrudnienia (Employment)

Każdy pracownik ma jedno Employment (pracodawca = Produkt Plus, pracownik = odpowiedni PartyRole). Dla zwięzłości poniżej dwa warianty: umowa o pracę i umowa zlecenie.

Anna Nowak (dyrektor główny wydziału):

{
  "resourceType": "Employment",
  "id": "emp-anna-nowak",
  "meta": { "lastModified": "2025-02-20T10:00:00Z" },
  "employer": { "reference": "PartyRole/role-firma-employer", "display": "Produkt Plus Sp. z o.o." },
  "employee": { "reference": "PartyRole/role-anna-nowak-employee", "display": "Anna Nowak" },
  "identifier": [{ "system": "https://api-erp.kamsoft.pl/ns/company", "value": "EMP-001" }],
  "period": { "start": "2018-01-15" },
  "type": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/employment-type", "code": "employment-contract", "display": "Umowa o pracę" }] },
  "status": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/status", "code": "active" }] }
}

Jan Zieliński (pracownik sekcji, umowa zlecenie):

{
  "resourceType": "Employment",
  "id": "emp-jan-zielinski",
  "meta": { "lastModified": "2025-02-20T10:00:00Z" },
  "employer": { "reference": "PartyRole/role-firma-employer", "display": "Produkt Plus Sp. z o.o." },
  "employee": { "reference": "PartyRole/role-jan-zielinski-employee", "display": "Jan Zieliński" },
  "identifier": [{ "system": "https://api-erp.kamsoft.pl/ns/company", "value": "EMP-006" }],
  "period": { "start": "2024-06-01" },
  "type": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/employment-type", "code": "contract-of-mandate", "display": "Umowa zlecenie" }] },
  "status": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/status", "code": "active" }] }
}

Pozostałe Employment (Michał, Maria, Tomasz, Katarzyna) – ta sama struktura, employer = role-firma-employer, employee = odpowiedni role-*-employee, period.start zgodny z datą wejścia.


5. Jednostki organizacyjne (OrganizationUnit)

Zarząd (szczebel najwyższy, bez partOf):

{
  "resourceType": "OrganizationUnit",
  "id": "ou-zarzad",
  "meta": { "lastModified": "2025-02-20T10:00:00Z" },
  "identifier": [{ "system": "https://api-erp.kamsoft.pl/ns/company", "value": "ZARZAD" }],
  "name": "Zarząd",
  "type": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/organization-unit-type", "code": "board", "display": "Zarząd" }] },
  "status": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/status", "code": "active" }] }
}

Wydział Produkcji (partOf = Zarząd). Dyrektor główny ustawiony w manager; dyrektor techniczny tylko w OrganizationAssignment.

{
  "resourceType": "OrganizationUnit",
  "id": "ou-wydzial-produkcji",
  "meta": { "lastModified": "2025-02-20T10:00:00Z" },
  "identifier": [{ "system": "https://api-erp.kamsoft.pl/ns/company", "value": "WYD-PROD" }],
  "name": "Wydział Produkcji",
  "type": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/organization-unit-type", "code": "department", "display": "Wydział" }] },
  "partOf": { "reference": "OrganizationUnit/ou-zarzad", "display": "Zarząd" },
  "period": { "start": "2020-01-01" },
  "status": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/status", "code": "active" }] }
}

Wydział Sprzedaży (partOf = Zarząd):

{
  "resourceType": "OrganizationUnit",
  "id": "ou-wydzial-sprzedazy",
  "meta": { "lastModified": "2025-02-20T10:00:00Z" },
  "identifier": [{ "system": "https://api-erp.kamsoft.pl/ns/company", "value": "WYD-SPRZ" }],
  "name": "Wydział Sprzedaży",
  "type": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/organization-unit-type", "code": "department", "display": "Wydział" }] },
  "partOf": { "reference": "OrganizationUnit/ou-zarzad", "display": "Zarząd" },
  "status": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/status", "code": "active" }] }
}

Zakład 1 (w Wydziale Produkcji, kierownik = Maria Wiśniewska):

{
  "resourceType": "OrganizationUnit",
  "id": "ou-zaklad-1",
  "meta": { "lastModified": "2025-02-20T10:00:00Z" },
  "identifier": [{ "system": "https://api-erp.kamsoft.pl/ns/company", "value": "ZAK-1" }],
  "name": "Zakład 1",
  "type": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/organization-unit-type", "code": "plant", "display": "Zakład" }] },
  "partOf": { "reference": "OrganizationUnit/ou-wydzial-produkcji", "display": "Wydział Produkcji" },
  "status": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/status", "code": "active" }] }
}

Zakład 2 (w Wydziale Sprzedaży, kierownik = Jan Zieliński):

{
  "resourceType": "OrganizationUnit",
  "id": "ou-zaklad-2",
  "meta": { "lastModified": "2025-02-20T10:00:00Z" },
  "identifier": [{ "system": "https://api-erp.kamsoft.pl/ns/company", "value": "ZAK-2" }],
  "name": "Zakład 2",
  "type": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/organization-unit-type", "code": "plant", "display": "Zakład" }] },
  "partOf": { "reference": "OrganizationUnit/ou-wydzial-sprzedazy", "display": "Wydział Sprzedaży" },
  "status": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/status", "code": "active" }] }
}

Sekcja A (w Zakładzie 1, kierownik = Tomasz Lewandowski):

{
  "resourceType": "OrganizationUnit",
  "id": "ou-sekcja-a",
  "meta": { "lastModified": "2025-02-20T10:00:00Z" },
  "identifier": [{ "system": "https://api-erp.kamsoft.pl/ns/company", "value": "SEKC-A" }],
  "name": "Sekcja A",
  "type": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/organization-unit-type", "code": "section", "display": "Sekcja" }] },
  "partOf": { "reference": "OrganizationUnit/ou-zaklad-1", "display": "Zakład 1" },
  "status": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/status", "code": "active" }] }
}

Sekcja B (w Zakładzie 1, kierownik = Katarzyna Dąbrowska):

{
  "resourceType": "OrganizationUnit",
  "id": "ou-sekcja-b",
  "meta": { "lastModified": "2025-02-20T10:00:00Z" },
  "identifier": [{ "system": "https://api-erp.kamsoft.pl/ns/company", "value": "SEKC-B" }],
  "name": "Sekcja B",
  "type": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/organization-unit-type", "code": "section", "display": "Sekcja" }] },
  "partOf": { "reference": "OrganizationUnit/ou-zaklad-1", "display": "Zakład 1" },
  "status": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/status", "code": "active" }] }
}

6. Przypisania do jednostek (OrganizationAssignment)

Przypisania łączą pracowników z jednostkami. Kierownik, zastępca i dyrektorzy są wyłącznie w OrganizationAssignment przez hierarchyLevel (primary-manager, deputy, main-director, technical-director).

Anna Nowak – dyrektor główny Wydziału Produkcji:

{
  "resourceType": "OrganizationAssignment",
  "id": "oa-anna-wydzial",
  "meta": { "lastModified": "2025-02-20T10:00:00Z" },
  "employee": { "reference": "PartyRole/role-anna-nowak-employee", "display": "Anna Nowak" },
  "organizationalUnit": { "reference": "OrganizationUnit/ou-wydzial-produkcji", "display": "Wydział Produkcji" },
  "period": { "start": "2019-03-01" },
  "hierarchyLevel": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/hierarchy-level", "code": "main-director", "display": "Dyrektor główny" }] },
  "employment": { "reference": "Employment/emp-anna-nowak", "display": "Anna Nowak – Produkt Plus" },
  "status": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/status", "code": "active" }] }
}

Michał Nowicki – dyrektor techniczny Wydziału Produkcji:

{
  "resourceType": "OrganizationAssignment",
  "id": "oa-michal-wydzial",
  "meta": { "lastModified": "2025-02-20T10:00:00Z" },
  "employee": { "reference": "PartyRole/role-michal-nowicki-employee", "display": "Michał Nowicki" },
  "organizationalUnit": { "reference": "OrganizationUnit/ou-wydzial-produkcji", "display": "Wydział Produkcji" },
  "period": { "start": "2020-06-01" },
  "hierarchyLevel": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/hierarchy-level", "code": "technical-director", "display": "Dyrektor techniczny" }] },
  "employment": { "reference": "Employment/emp-michal-nowicki", "display": "Michał Nowicki – Produkt Plus" },
  "status": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/status", "code": "active" }] }
}

Maria Wiśniewska – kierownik Zakładu 1 (hierarchyLevel=primary-manager):

{
  "resourceType": "OrganizationAssignment",
  "id": "oa-maria-zaklad1",
  "meta": { "lastModified": "2025-02-20T10:00:00Z" },
  "employee": { "reference": "PartyRole/role-maria-wisniewska-employee", "display": "Maria Wiśniewska" },
  "organizationalUnit": { "reference": "OrganizationUnit/ou-zaklad-1", "display": "Zakład 1" },
  "period": { "start": "2021-01-01" },
  "hierarchyLevel": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/hierarchy-level", "code": "primary-manager", "display": "Główny przełożony (kierownik zakładu)" }] },
  "employment": { "reference": "Employment/emp-maria-wisniewska", "display": "Maria Wiśniewska – Produkt Plus" },
  "status": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/status", "code": "active" }] }
}

Tomasz Lewandowski – kierownik Sekcji A:

{
  "resourceType": "OrganizationAssignment",
  "id": "oa-tomasz-sekcja-a",
  "meta": { "lastModified": "2025-02-20T10:00:00Z" },
  "employee": { "reference": "PartyRole/role-tomasz-lewandowski-employee", "display": "Tomasz Lewandowski" },
  "organizationalUnit": { "reference": "OrganizationUnit/ou-sekcja-a", "display": "Sekcja A" },
  "period": { "start": "2022-04-01" },
  "hierarchyLevel": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/hierarchy-level", "code": "primary-manager", "display": "Kierownik sekcji" }] },
  "employment": { "reference": "Employment/emp-tomasz-lewandowski", "display": "Tomasz Lewandowski – Produkt Plus" },
  "status": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/status", "code": "active" }] }
}

Katarzyna Dąbrowska – kierownik Sekcji B:

{
  "resourceType": "OrganizationAssignment",
  "id": "oa-katarzyna-sekcja-b",
  "meta": { "lastModified": "2025-02-20T10:00:00Z" },
  "employee": { "reference": "PartyRole/role-katarzyna-dabrowska-employee", "display": "Katarzyna Dąbrowska" },
  "organizationalUnit": { "reference": "OrganizationUnit/ou-sekcja-b", "display": "Sekcja B" },
  "period": { "start": "2022-09-01" },
  "hierarchyLevel": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/hierarchy-level", "code": "primary-manager", "display": "Kierownik sekcji" }] },
  "employment": { "reference": "Employment/emp-katarzyna-dabrowska", "display": "Katarzyna Dąbrowska – Produkt Plus" },
  "status": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/status", "code": "active" }] }
}

Jan Zieliński – pracownik Sekcji A (bez funkcji kierowniczej w tej jednostce; równolegle kierownik Zakładu 2 w innym wydziale):

{
  "resourceType": "OrganizationAssignment",
  "id": "oa-jan-sekcja-a",
  "meta": { "lastModified": "2025-02-20T10:00:00Z" },
  "employee": { "reference": "PartyRole/role-jan-zielinski-employee", "display": "Jan Zieliński" },
  "organizationalUnit": { "reference": "OrganizationUnit/ou-sekcja-a", "display": "Sekcja A" },
  "period": { "start": "2024-06-01" },
  "employment": { "reference": "Employment/emp-jan-zielinski", "display": "Jan Zieliński – Produkt Plus" },
  "status": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/status", "code": "active" }] }
}

Jan Zieliński – kierownik Zakładu 2 (drugie przypisanie: ta sama osoba w innej jednostce jako kierownik):

{
  "resourceType": "OrganizationAssignment",
  "id": "oa-jan-zaklad-2",
  "meta": { "lastModified": "2025-02-20T10:00:00Z" },
  "employee": { "reference": "PartyRole/role-jan-zielinski-employee", "display": "Jan Zieliński" },
  "organizationalUnit": { "reference": "OrganizationUnit/ou-zaklad-2", "display": "Zakład 2" },
  "period": { "start": "2024-06-01" },
  "hierarchyLevel": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/hierarchy-level", "code": "primary-manager", "display": "Kierownik zakładu" }] },
  "employment": { "reference": "Employment/emp-jan-zielinski", "display": "Jan Zieliński – Produkt Plus" },
  "status": { "coding": [{ "system": "https://api-erp.kamsoft.pl/ns/status", "code": "active" }] }
}

Wariant zatrudnienia: Jan ma jedno Employment (umowa zlecenie u Produkt Plus) i dwa OrganizationAssignment – w Sekcji A jako zwykły pracownik oraz w Zakładzie 2 jako kierownik (możliwy scenariusz łączenia ról lub przeniesienia w czasie).


7. Diagram hierarchii jednostek i ról

flowchart TB
  subgraph zarzad [Zarząd]
    Z[OrganizationUnit Zarząd board]
  end

  subgraph wydzial_prod [Wydział Produkcji]
    W1[OrganizationUnit Wydział Produkcji department]
    W1 --- D1[OrganizationAssignment Anna Nowak main-director]
    W1 --- D2[OrganizationAssignment Michał Nowicki technical-director]
  end

  subgraph zaklad1 [Zakład 1]
    K1[OrganizationUnit Zakład 1 plant]
    K1 --- S1[OrganizationUnit Sekcja A section]
    K1 --- S2[OrganizationUnit Sekcja B section]
  end

  subgraph wydzial_sprz [Wydział Sprzedaży]
    W2[OrganizationUnit Wydział Sprzedaży department]
  end

  subgraph zaklad2 [Zakład 2]
    K2[OrganizationUnit Zakład 2 plant]
  end

  Z --> W1
  Z --> W2
  W1 --> K1
  W2 --> K2

8. Podsumowanie wariantów

Osoba Employment (typ) Jednostka Rola (hierarchyLevel w OrganizationAssignment)
Anna Nowak Umowa o pracę Wydział Produkcji Dyrektor główny (hierarchyLevel=main-director)
Michał Nowicki Umowa o pracę Wydział Produkcji Dyrektor techniczny (hierarchyLevel=technical-director)
Maria Wiśniewska Umowa o pracę Zakład 1 Kierownik zakładu (hierarchyLevel=primary-manager)
Tomasz Lewandowski Umowa o pracę Sekcja A Kierownik sekcji (hierarchyLevel=primary-manager)
Katarzyna Dąbrowska Umowa o pracę Sekcja B Kierownik sekcji (hierarchyLevel=primary-manager)
Jan Zieliński Umowa zlecenie Sekcja A Pracownik (OrganizationAssignment bez hierarchyLevel)
Jan Zieliński Umowa zlecenie Zakład 2 Kierownik zakładu (hierarchyLevel=primary-manager)

Konwencje: Kierownik, zastępca i dyrektorzy są wyłącznie w OrganizationAssignment (pole hierarchyLevel: primary-manager, deputy, main-director, technical-director). OrganizationUnit nie ma pola manager. Jedna osoba może mieć wiele OrganizationAssignment (różne jednostki lub role w czasie).