LPS:IdM/midPoint/Magion
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
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:
- MAGION_EXT.V_PE_ZCU_ORGSTR_IDM
- organizační jednotky
- sporné platnosti datumů: https://rt.zcu.cz/rt/Ticket/Display.html?id=262135
Číselníky
Obecné číselníky.
Přiřazování osobám se udržuje u:
- PE_KATEG1 - přiřazování PPV, viz #Kategorie úvazků
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
- už se hlídá
- stane se v případě pádu liveSync tasku pro PPV, kdu task pro osoby zůstane běžet
- TODO: prozkoumat možnosti rozšíření zde: https://wiki.evolveum.com/display/midPoint/Task+notifications, základní použití viz Re: [midPoint] livesync task error causes suspend
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šť
- zjistit seznam, např.:
./query-org.py subtype=deactivated-hr-org-str --csv activation/validTo,name,extension/ext:OU_NAZEV
- 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
- 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)
- zkontrolovat, že nemá resourcy (projections)
- zkontrolovat assignmenty (použito ve skupinách z midPointu) a použít stejné i v nové org. jednotce
- smazání z SUN_IDM.IDM_PRACOVISTE @ GINA
- 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:
- 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.
- 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...)