.. _oper_db:

======================
Schéma databáze
======================

Komponenta má data uložena ve vlastní databázi PostgreSQL. Schéma spravuje
Liquibase (viz :ref:`config_migration`).

Fond
======

Tabulka: ``pv_fund``

Stažené archivní soubory (fondy) z PEvA.

.. list-table::
   :class: longtable
   :header-rows: 1
   :widths: 10 8 30

   * - Sloupec
     - Datový typ
     - Popis
   * - fund_id
     - long
     - primární klíč
   * - uuid
     - uuid
     - identifikátor fondu v PEvA
   * - fund_name
     - string
     - název fondu
   * - fund_number
     - string
     - evidenční číslo (jen u primárního NAD listu)
   * - institution_id
     - string
     - externí identifikátor instituce
   * - ruleset_code
     - string
     - kód pravidel (např. ZP2015)
   * - internal_code
     - string
     - interní kód (zatím nevyplňováno)
   * - date_range
     - string
     - časový rozsah fondu
   * - mark
     - string
     - značka fondu
   * - department_name
     - string
     - název oddělení v PEvA (pro výběr výchozích administrátorů fondu)
   * - department_number
     - string
     - číslo oddělení v PEvA (pro výběr výchozích administrátorů fondu)


Stav stahování
================

Tabulka: ``property``

Klíč-hodnota pro inkrementální stahování (pozice ve stránkování a časová značka
poslední úspěšné synchronizace), např. ``PEVA_SEARCH_AFTER`` a
``PEVA_UPDATE_AFTER``.

.. list-table::
   :class: longtable
   :header-rows: 1
   :widths: 10 8 30

   * - Sloupec
     - Datový typ
     - Popis
   * - property_id
     - int
     - primární klíč
   * - name
     - string
     - název vlastnosti
   * - value
     - text
     - hodnota


.. _oper_db_elza_queue:

Odchozí fronta do Elza
===========================

Tabulka: ``elza_queue``

Obsahuje fondy připravené k odeslání do Elza. Po úspěšném odeslání je záznam
z tabulky odstraněn. V PEVA Connectoru je fronta určena pouze pro fondy (na
rozdíl od Imwhooseru, kde tatáž tabulka sloužila i pro entity).

.. list-table::
   :class: longtable
   :header-rows: 1
   :widths: 10 8 30

   * - Sloupec
     - Datový typ
     - Popis
   * - elza_queue_id
     - long
     - primární klíč
   * - fund_id
     - long
     - odkaz na odesílaný fond do tabulky ``pv_fund``
   * - status
     - text
     - text poslední chyby odeslání záznamu, null pokud není chyba
   * - request_id
     - uuid
     - identifikátor požadavku pro odeslání
   * - scope
     - string
     - kód oblasti (scope), do které se záznam v Elze odesílá
   * - action
     - string
     - obvykle NULL - položka k odeslání, hodnota ``DISABLED`` umožňuje zakázat
       odesílání záznamu
   * - create_time
     - timestamp
     - čas vložení záznamu do fronty
   * - send_time
     - timestamp
     - čas posledního pokusu o odeslání

.. note::

   Sloupec ``entity_id`` z Imwhooseru PEVA Connector nevyužívá. Při převzetí
   databáze jej úklidový krok automaticky a nevratně odstraní (spolu s dalším
   entity-side schématem Imwhooseru) - viz :ref:`config_migration`.

Chování při chybě odeslání
--------------------------

Pokud se záznam nepodaří odeslat do Elzy, **neodstraní** se z fronty. Text chyby
se uloží do sloupce ``status``, čas pokusu do ``send_time`` a záznam se ve
výchozím nastavení v dalším cyklu odešle znovu - opakuje se tedy automaticky,
dokud neuspěje (s postupně prodlužovaným intervalem mezi pokusy). Tím se řeší
i dočasné nebo odstranitelné chyby, např. chybějící oprávnění *ADMIN*
servisního účtu při aktualizaci spravovaného fondu (viz :ref:`intro_readonly`).

Je-li v konfiguraci nastaveno ``elza.disableIfError: true``, dostane chybný
záznam místo toho hodnotu ``action = DISABLED`` a **automaticky se znovu
neodesílá**, dokud není opět povolen. Ve výchozím stavu je tato volba vypnutá
(``false``), takže se odeslání opakuje až do úspěchu.
