.. _config_peva:

====================
Konfigurace PEvA
====================

Konfigurace PEvA slouží pro čtení seznamu archivních souborů daného archivu.

.. code-block:: yaml

  # Nastavení pro import z PEvA
  peva:
    url: https://portal.nacr.cz/peva-external/ws/peva/
    username: 610000070
    password: XXXXXXX
    userId: uncz610000070t5454
    institutionId: cdd5810c-ac35-49a7-8a74-410982319218
    rulesetCode: ZP2015
    # volitelně: výraz pro generování interního kódu fondu (viz níže)
    internalCode: "ABC-#{#fundNumber}"
    fund:
      defaultScopes:
        - CAM
        - "MUA-GLOBAL"
      # výchozí administrátoři zakládaných fondů (viz níže)
      defaultAdminUsers:
        - 123
      defaultAdminGroups:
        - 45
    interval: 3600
    batchSize: 100
    processing:
      enabled: true
    # výchozí administrátoři pro oddělení hlavní instituce (viz níže)
    # do name se uvádí název NEBO číslo oddělení v PEvA
    departments:
      - name: "1. oddělení"
        adminUsers:
          - 321
        adminGroups:
          - 54
    # další instituce, pro které se stahují fondy
    institutions:
      - institutionId: 4ab78684-ef87-4252-b3d4-a1d2a1abc3cd
        username: 223101010
        # výraz pro interní kód fondů této instituce (override hodnoty peva.internalCode)
        internalCode: "XYZ-#{#fundNumber}"
        # administrátoři specifičtí pro tuto instituci (override výchozích hodnot)
        adminUsers:
          - 678
        adminGroups:
          - 90
        # administrátoři specifičtí pro jednotlivá oddělení této instituce
        # (override hodnot instituce i výchozích hodnot)
        departments:
          - name: "Oddělení fondů státní správy"
            adminUsers:
              - 876
            adminGroups:
              - 9

Vybraná nastavení:

 - ``processing.enabled`` - zapnutí/vypnutí stahování z PEvA.
 - ``interval`` - interval kontroly změn v sekundách.
 - ``batchSize`` - velikost stránky při stahování seznamu NAD listů.


Administrátoři fondu
=========================

Při zakládání fondu v Elze lze automaticky nastavit jeho administrátory -
uživatele (``adminUsers`` / ``defaultAdminUsers``) a skupiny
(``adminGroups`` / ``defaultAdminGroups``).

.. warning::

   Hodnotami jsou **databázová ID** uživatelů a skupin v Elze (do Elzy se
   posílají ID, nikoli přihlašovací jména ani kódy). ID je nutné zjistit
   v cílové instalaci Elzy.

Administrátoři se určují na třech úrovních. Použije se vždy **první úroveň,
která má pro daný seznam (uživatelé / skupiny) neprázdnou hodnotu**, v pořadí:

 - **Pro konkrétní oddělení** - nejvyšší priorita. Oddělení se identifikuje
   jedinou hodnotou ``name``, která se porovnává s **názvem nebo číslem**
   oddělení v PEvA (entita *Department*, položky *name* / *number*). Uživatel
   obvykle neví, zda v PEvA zadává název, nebo číslo, proto stačí uvést jednu
   hodnotu a spáruje se proti oběma. Uvádí se v sekci ``departments`` - buď
   u hlavní instituce přímo pod ``peva`` (``peva.departments``), nebo u dalších
   institucí uvnitř dané položky (``institutions[].departments``). Každá položka
   má ``name`` a volitelně ``adminUsers`` / ``adminGroups``.
 - **Pro konkrétní instituci** v sekci ``institutions`` (``adminUsers``,
   ``adminGroups``) - pokud jsou uvedeny, **nahrazují** (override) výchozí
   hodnoty pro danou instituci.
 - **Výchozí** v sekci ``fund`` (``defaultAdminUsers``, ``defaultAdminGroups``) -
   použijí se pro hlavní instituci a pro každou instituci, která nemá vlastní
   nastavení.

Seznamy uživatelů a skupin se vyhodnocují **nezávisle** - fond tak může získat
například uživatele z úrovně oddělení a skupiny z úrovně instituce, pokud dané
oddělení skupiny nedefinuje.

.. note::

   Údaje o oddělení nejsou přímo v listu NAD - ten nese jen identifikátor (UUID)
   oddělení. Aplikace si proto při stahování název i číslo oddělení dotáhne
   z PEvA (volání *getDepartment*) a uloží je k fondu. Hodnota ``name``
   v konfiguraci musí přesně odpovídat názvu **nebo** číslu oddělení v PEvA.

Pokud nejsou administrátoři uvedeni, fond se zakládá bez nastavených
administrátorů.

.. important::

   Administrátoři se nastavují **pouze při prvním založení fondu** v Elze. Při
   následných aktualizacích fondu (opětovné synchronizaci po změně v PEvA) se
   seznam administrátorů **záměrně neodesílá**, takže oprávnění přiřazená ručně
   v Elze zůstanou zachována. Elza totiž bere odeslaný seznam ``adminUsers`` /
   ``adminGroups`` jako úplný (nahrazuje jím stávající oprávnění fondu); kdyby se
   posílal při každé synchronizaci, ručně nastavená oprávnění by se resetovala.


Interní kód fondu (``internalCode``)
=====================================

Při odesílání fondu do Elzy lze automaticky vyplnit jeho **interní kód**
(``internalCode``). Hodnota se počítá z výrazu uvedeného v konfiguraci pomocí
šablony jazyka *Spring Expression Language* (SpEL); dosazovaná část se zapisuje
do oddělovačů ``#{ }``. K dispozici je proměnná ``#fundNumber`` s číslem fondu,
takže např. výraz::

  internalCode: "ABC-#{#fundNumber}"

vytvoří pro fond s číslem ``123`` interní kód ``ABC-123``.

Výraz se hledá podle instituce fondu:

 - **Hlavní instituce** (``peva.institutionId``) - použije se ``peva.internalCode``.
 - **Další instituce** uvedené v sekci ``institutions`` - použije se
   ``institutions[].internalCode`` dané instituce. Tato hodnota **nahrazuje**
   (override) ``peva.internalCode``; pokud u instituce není uvedena, interní kód
   se pro fondy této instituce **negeneruje** (nepřebírá se z hlavní instituce).

Pokud výraz pro danou instituci není uveden, fond se odesílá bez interního kódu.

.. note::

   Interní kód se dopočítává při každém odeslání fondu do Elzy (založení
   i aktualizace).
