LPS:IdM/midPoint/Magion

Z HelpDesk

Info

Personalistika - autorizovaný zdroj o zaměstnancích.

Tento resource řeší pouze čtení údajů. Modifikace jdou přes jiný resource, viz LPS:IdM/midPoint/MAGION-OUT.

Pohledy (viz repozitář test-environment).

Deaktivace objektu:

  • při deaktivaci objektu objekt "mizí" z pohledů
  • v midPointu informace zůstávají

Model v midPointu

Magion.dot.png

Objekty

V Magionu jsou "na jedné hromadě" uložena historická, aktuální i budoucí data a vždy je třeba vybírat správné záznamy podle nastavení platnosti a rozsahu datumů. Pohledy do Magionu pro IdM s tímto pracují.

Osoby

  • primární klíč OS_CIS
  • napojení OS_CIS, ROD_CIS (kvuli zmatkům při zakládání osob se již raději nechystáme na os.č., pouze na RČ)

Pohledy:

  • MAGION_EXT.V_PE_ZCU_ZAM_IDM
    • lidé - aktivní zaměstnanci
    • v datech se kontrolují aktuální i budoucí osoby (s limitem 20 dnů)
      • z akuálních záznamů se bere nejnovější, z budoucích ten první "nejstarší"
      • aktuální záznam má vždy přednost před budoucím (bylo opraveno 2019-05-13)
        • vyjímka: pokud něco chybí u aktuálního záznamu (ROD_CIS, PRIJMENI) a budoucí je OK, vezme se ten budoucí (bylo opraveno 2020-03-13)
  • MAGION_EXT.V_PE_ZCU_ZAM_ZMENA_IDM
    • lidé - rychlý pohled na detekci změn
    • poznává i začátky úvazků

Úvazky (PPV)

  • primární klíč OS_CIS + CISLO_PP
  • napojení OS_CIS + CISLO_PP

Pohledy:

  • MAGION_EXT.V_PE_ZCU_PP_IDM
    • pracovní úvazky
  • MAGION_EXT.V_PE_ZCU_PP_ZMENA_IDM
    • pracovní úvazky - rychlý pohled na detekci změn

Pracovní místa (PM)

Funkce spojené s pracovištěm.

  • primární klíč ID (SY_MISTO_ID z MAGION.SY_MISTA)
  • napojení ID (SY_MISTO_ID z MAGION.SY_MISTA)

Pohledy:

  • MAGION_EXT.V_PE_ZCU_PMISTA_PP_IDM
    • pracovní místa - vazby na pracovní úvazky
    • v Magionu drobné nekonzistence - místa zůstávají i u skončených pracovních poměrů
  • MAGION_EXT.V_PE_ZCU_PMISTA_SEZNAM_IDM
    • pracovní místa - seznam (tj. "seznam funkcí")

Pracoviště

  • primární klíč ID (SY_ORG_JED_ID z MAGION.SY_ORG_JED)
  • napojení ID (SY_ORG_JED_ID z MAGION.SY_ORG_JED)

Pohledy:

Číselníky

Obecné číselníky.

Přiřazování osobám se udržuje u:

Jinak se udržuje jen samotný organizační strom, bez přiřazování.

  • primární klíč HR_SY_CISPOL_ID (SY_CISPOL_ID z MAGION.SY_CISPOL)
  • napojení HR_SY_CISPOL_ID (SY_CISPOL_ID z MAGION.SY_CISPOL)

Pohledy:

  • MAGION_EXT.V_PE_ZCU_CISELNIKY_IDM
  • MAGION_EXT.V_PE_ZCU_CISELNIKY_ZMENA_IDM

Skupiny

Vesměs po pracovištích.

  • primární klíč ID (SY_ORG_JED_ID z MAGION.SY_ORG_JED)
  • napojení ID (SY_ORG_JED_ID z MAGION.SY_ORG_JED)

Pohledy: jako pracoviště

Co hlídat

  • stub pracoviště - bez linku na resource
  • pracoviště bez rodiče
  • deaktivovaná pracoviště - vhodné zkontrolovat a smazat kvuli recyklacím kódů, viz #Údržba
  • úvazek v seznamu u osoby, ale není přiřazený přes assignment

Záměna identit (!):

Dost nebezpečná věc je změna osobního čísla u osoby v Magionu, protože může dojít k záměně identity (na dané osobě s přiřazeným CRO ID se prostě změní jméno, příjmení, RČ, ...). Naštěstí se děje spíše jen u nově zadávaných záznamů.

Lze kontrolovat sledováním změny datumu narození (prefixu RČ). Potenciálně nebezpečné události lze získat např. z historie v emulovaném CRO (zde příklad s omezením na 6 měsíců):

SELECT
    CRO_ID,
    COUNT(DISTINCT SUBSTR(RODNE_CISLO, 0, 6)) RC_PREFIX_COUNT,
    COUNT(DISTINCT OS_CISLO) OS_CISLO_COUNT
FROM IDM_OSOBY_LOG
WHERE LAST_ACTION_TSTAMP + 182 > SYSDATE
GROUP BY CRO_ID
HAVING
    COUNT(DISTINCT SUBSTR(RODNE_CISLO, 0, 6)) > 1
    OR COUNT(DISTINCT OS_CISLO) > 1;

A pak detaily:

DEFINE CRO_ID = ...;
SELECT CRO_ID, RODNE_CISLO, OS_CISLO, LAST_ACTION_TSTAMP FROM IDM_OSOBY_LOG WHERE CRO_ID = &CRO_ID ORDER BY LAST_ACTION_TSTAMP;

Propojování identit (platí i pro IS/STAG):

U cizinců se obvykle zadává RČ podle datumu narození a doplňuje se koncovka "23XX", kde XX jsou iniciály ze jména. Správně by se měly hlídat rozdíly jména a příjmení mezi Magion a IS/STAG.

Ale to RČ není to až tak jednoduché - pokud byl daný člověk dříve na jiné škole, má se použít to původní RČ z jiné školy (přiteče ze SIMS). A v kombinaci s Magionem je pak nutné RČ změnit odpovídajícím způsobem i v Magionu - to musí udělat administrátoři, protože se hlídá koncovka "23XX".

Údržba

Mazání deaktivovaných pracovišť

  1. zjistit seznam, např.:
    ./query-org.py subtype=deactivated-hr-org-str --csv activation/validTo,name,extension/ext:OU_NAZEV
  2. zkontrolovat všechny reference:
    "ORG=HR: ..."
    ./query-all-references.sh $(./query-org.py "name=$ORG" --oid):org

    Výše uvedený příkaz zkontroluje:

    • že není org. jednotka použita v assignmentech v uživatelích, rolích nebo org. jednotkách
    • že není org. jednotka použita v inducementech v rolích nebo org. jednotkách

    Jistá nedokonalost u deaktivovaných úvazků. Pročistí to příkaz (nahradit $orgOid):

    for oid in $(./query-role.py subtype=ppv extension/ext:HR_ENABLED=false inducement/targetRef@=$orgOid:org --oid); do ./modify-role.py --oid "$oid" --delete-inducement "$orgOid":org; done

  3. zkontrolovat, že nemá members (neměly by být po kontrole (2), ale po změnách rolích je potřeba identitu uživatele přepočítat)
  4. zkontrolovat, že nemá resourcy (projections)
  5. zkontrolovat assignmenty (použito ve skupinách z midPointu) a použít stejné i v nové org. jednotce
  6. smazání z SUN_IDM.IDM_PRACOVISTE @ GINA
  7. smazání

Rezervace názvů pracovišť

Rezervace proti zaregistrování si zkratky pracoviště jako loginu (i když částečně pokryto zákazem loginů kratších než 4 písmena).

# Pracoviště
./query-org.py  subtype=hr-org-str --csv extension/ext:OU_ZKRATKA | sort | uniq
# ==>
# name,extension/ext:login,subtype,familyName
# AC,AC,LOGIN,AC

./create-user.py --csv prac.csv description=pracoviště -a types-org-str-reservation:org

Kategorie úvazků

Použito pro generování skupin akademik, vedec, thp, manual. [1]

Použito v ISIC pro počítání učitelů (akademik).

Příklad - prvotní založení těchto skupin:

./group.py -g 1005 -s 'Akademičtí pracovníci' akademik
./group.py -g 1006 -s 'Vědci' vedec
./group.py -g 1007 -s 'Technicko-hospodářští pracovníci' thp
./group.py -g 1008 -s 'Manuální pracovníci' manual

#./query-org.py subtype=hr-codes-str 'name startsWith HR PE_KATEG' --csv subtype,identifier,name

for i in 10 11 12 13 14 15 20 26; do
  ./modify-org.py --query subtype=hr-codes-str identifier=$i extension/ext:HR_SCI_NAZEV=PE_KATEG1 -a role-group-akademik:role
done
./modify-org.py --query subtype=hr-codes-str identifier=21 extension/ext:HR_SCI_NAZEV=PE_KATEG1 -a role-group-vedec:role
./modify-org.py --query subtype=hr-codes-str identifier=22 extension/ext:HR_SCI_NAZEV=PE_KATEG1 -a role-group-thp:role
./modify-org.py --query subtype=hr-codes-str identifier=24 extension/ext:HR_SCI_NAZEV=PE_KATEG1 -a role-group-thp:role
./modify-org.py --query subtype=hr-codes-str identifier=23 extension/ext:HR_SCI_NAZEV=PE_KATEG1 -a role-group-manual:role

Kontrola (všichni někam patří):

ldapsearch -h themis.civ.zcu.cz '(&(!(|(memberof=cn=thp,ou=groups,ou=rfc2307,o=zcu,c=cz)(memberof=cn=vedec,ou=groups,ou=rfc2307,o=zcu,c=cz)(memberof=cn=akademik,ou=groups,ou=rfc2307,o=zcu,c=cz)(memberof=cn=manual,ou=groups,ou=rfc2307,o=zcu,c=cz)))(idmStatus=A1)(memberof=cn=staff,ou=groups,ou=rfc2307,o=zcu,c=cz))' uid

Ruční blokace

Platný vztah se ZČU bereme podle zadaného v úvazku v personalistice. Někdy je potřeba řešit vyjímky a blokovat dříve, např.:

  • běžící dovolená na konci pracovního poměru
  • platné DPP, ale již vyčerpané hodiny
  • neaktualizovaný Magion
  • problematický odchod

Vše v kombinaci se striktním poždavkem pracoviště na blokaci.

Požadavky na implementaci:

  1. Není vhodné blokovat celé konto, ale jen daný úvazek na daném pracovišti. Konto se blokuje až když jde o poslední vztah se ZČU.
  2. Jsou vnitřní vazby v rámci konektoru (blokovat i pracovní místo aka funkci, blokovat celého člověk pokud jde o poslední úvazek, ...). Tj. informace o blokaci je potřeba mít už na úrovni konetoru.

==> Implementováno pomocí konfigurace resourcu MAGION, položka ignoredPP. Jde o čárkami oddělovaný seznam ve formátu OS_CISLO-CISLO_PP.

Postup blokace:

  • přidat úzavek OS_CISLO-CISLO_PP do položky Ignored PPV v konfiguraci resourcu MAGION
  • (teoreticky není zatím potřeba) najít a přeuložit všechny funkce, k nalezení pře indirect assignments na identitě
  • přeuložit roli PPV: OS_CISLO-CISLO_PP
  • přeuložit identitu

Resource

kind objectClass intent strom
account AccountObjectClass zamestnanec -
entitlement GroupObjectClass ppv subtype='ppv'
generic (focus OrgType) CustomOrganizationObjectClass org-str subtype='hr-org-str'/'deactivated-hr-org-str'/'hosted-org-str'
generic (focus OrgType) CustomCodeObjectClass code subtype='hr-codes-str'
entitlement (focus RoleType) CustomJobTitleObjectClass pm subtype='pm'
entitlement (focus RoleType) CustomIdmRoleStaffObjectClass global-group-staff subtype='hr-global-group-staff'
entitlement (focus RoleType) CustomIdmRoleDppDpcObjectClass global-group-dppdpc subtype='hr-global-group-dppdpc'
entitlement (focus RoleType) CustomIdmRoleSecretariatObjectClass global-group-secretariat subtype='hr-global-group-secretariat'
entitlement (focus RoleType) CustomIdmRoleSecretaryDptObjectClass global-group-secretarydpt subtype='hr-global-group-secretarydpt'
entitlement (focus RoleType) CustomIdmRoleManagerDptObjectClass global-group-managerdpt subtype='hr-global-group-managerdpt'

Role

ppv

  • prefix: "PPV: "
  • pracovně právní vztah ("zaměstnanecké pozice")

pm

  • prefix: "PM: "
  • pracovní místa ("funkce")

hr-global-group-staff

  • prefix: "GLOBAL: Zaměstnanci "
  • zaměstnanci na hlavní nebo vedlejší pracovní poměr (TODO: check!!)
  • UROVEN = 4 OR UROVEN = 3 OR LOWER(NAZEV) LIKE '%katedra%'
  • TODO: úroveň pracovišť asi neřešit

hr-global-group-dppdpc

  • prefix: "GLOBAL: Dohodáři "
  • zaměstnanci na dohodu
  • UROVEN = 4 OR UROVEN = 3 OR LOWER(NAZEV) LIKE '%katedra%'
  • TODO: úroveň pracovišť asi neřešit

hr-global-group-secretariat

  • prefix: "GLOBAL: Sekretariát "
  • sekretářky
  • (UROVEN = 4 OR UROVEN = 3 OR UROVEN = 2 OR LOWER(NAZEV) LIKE '%fakulta%' OR LOWER(NAZEV) LIKE '%katedra%')
  • TODO: úroveň pracovišť asi neřešit

hr-global-group-secretarydpt

  • prefix: "GLOBAL: Tajemník "
  • tajemníci
  • (UROVEN = 4 OR UROVEN = 3 OR UROVEN = 2 OR LOWER(NAZEV) LIKE '%fakulta%' OR LOWER(NAZEV) LIKE '%katedra%')
  • TODO: úroveň pracovišť asi neřešit

hr-global-group-managerdpt

  • prefix: "GLOBAL: Vedoucí "
  • vedoucí pracovišť (TODO: check!)
  • (UROVEN = 4 OR UROVEN = 3 OR UROVEN = 2 OR LOWER(NAZEV) LIKE '%fakulta%' OR LOWER(NAZEV) LIKE '%katedra%')
  • TODO: úroveň pracovišť asi neřešit

TODO

Funkce:

  • nefunguje dobře synchronizace funkcí - při odpojení v Magionu nemizí z inducements (u PPV) v midPointu - asi překopat i SQL pohledy
  • chtělo by to celé předělat a zobecnit (možná zapojit tenent feature - společná funkce (tejemník, vedoucí, ...) pro více pracovišť - ale interně to tak v Magionu uloženo není a do skupin je to potřeba také rozbalit, tak třeba ne...)