====== Workflow stažení dokumentu do ESO9 ======
===== 1. Vznik dokumentu na AP =====
* AP přijme dokument a nastaví mu ''%%status = 1%%''.
===== 2. Volání Webhooku =====
* Webhook má ve své databázi uloženo ''%%AppID%%''.
* Webhook získá ''%%Secret%%'' z HTTP volání AP.
* AP zavolá Webhook a předá ''%%AppID%%'' a ''%%Secret%%''.
* Webhook spustí databázovou proceduru ''%%spPeppolDocDownloader%%'' pro stažení dokladu do produkční DB.
* Oba tyto údaje musí být **totožné s databází subjektů na AP**.
===== 3. Autorizace požadavku =====
* Webhook přijme požadavek z AP a porovná ''%%AppID%%'' a ''%%Secret%%'' s údaji ve své interní databázi.
* Pokud údaje **nesouhlasí**, Webhook vrátí **neautorizovanou odpověď (401)**.
* Dle ''%%AppID%%'' najde produkční databázi aplikace, pro kterou je doklad určen.
* Porovná ''%%Secret%%'' získaný z provolání z AP s údaji v produkční databázi dané aplikace.
* Pokud údaje **nesouhlasí**, Webhook vrátí **neautorizovanou odpověď (401)**.
===== 4. Zápis do produkční databáze =====
* Webhook přistupuje do produkční databáze s **SQL autentikací**. Přihlašovací údaje (connection string) jsou uloženy ve vlastní databázi Webhooku.
* Použitý SQL účet musí mít oprávnění:
* práva na funkci ''%%fnHodnotaParam_Varchar%%''
* právo zápisu do tabulky ''%%PEPPOL_DOC_QUEUE%%''
* SQL skript pro založení uživatelského účtu:
-- Připojení k master databázi
USE [master];
GO
-- Vytvoření přihlašovacího jména (login) na úrovni serveru
CREATE LOGIN [PeppolHttpHandler]
WITH PASSWORD = 'SilneHeslo123!';
GO
* SQL skript pro založení příslušné DB role:
CREATE ROLE [PeppolHttpHandlerRole]
GO
GRANT INSERT ON [dbo].[PEPPOL_DOC_QUEUE] TO [PeppolHttpHandlerRole]
GO
GRANT SELECT ON [dbo].[PEPPOL_DOC_QUEUE] TO [PeppolHttpHandlerRole]
GO
GRANT EXECUTE ON [dbo].[fnHodnotaParam_Varchar] TO [PeppolHttpHandlerRole]
GO
GRANT EXECUTE ON [dbo].[spPeppolDocDownloader] TO [PeppolHttpHandlerRole]
GO
* SQL skript pro přidělení příslušné DB role novému uživateli:
-- Vytvoření uživatele v databázi na základě přihlašovacího jména
CREATE USER [PeppolHttpHandler]
FOR LOGIN [PeppolHttpHandler];
GO
-- Přidání uživatele do konkrétní role v databázi
ALTER ROLE [PeppolHttpHandlerRole]
ADD MEMBER [PeppolHttpHandler];
GO
* Webhook otevře databázové spojení a zapíše záznam do tabulky ''%%PEPPOL_DOC_QUEUE%%''.
* Tento záznam obsahuje ID dokladu z AP.
* **Zde končí oprávnění databázové role použité Webhookem.**
===== 5. Stažení dokladu do produkční databáze =====
* Doklad se z AP do produkční DB stahuje databázovou procedurou ''%%spPeppolDocDownloader%%''.
* Tuto proceduru spouští Webhook.
* Procedura se spouští explicitně pod uživatelským účtem ''%%peppolDocCreate%%''.
* SQL skript pro založení uživatelského účtu:
-- Připojení k master databázi
USE [master];
GO
-- Vytvoření přihlašovacího jména (login) na úrovni serveru
CREATE LOGIN [peppolDocCreate]
WITH PASSWORD = 'SilneHeslo123!';
GO
* Uživatelský účet musí mít oprávnění:
* role ''%%DB_OWNER%%'' na:
* aplikační DB
* dokumentová DB
* logovací DB
* SQL skript pro přidělení příslušné DB role novému uživateli
USE ESO9Start / ESO9Start_DOC / ESO9Start_LOG
-- Vytvoření uživatele v databázi na základě přihlašovacího jména
CREATE USER [peppolDocCreate]
FOR LOGIN [peppolDocCreate];
GO
-- Přidání uživatele do role db_owner v databázi
ALTER ROLE [db_owner]
ADD MEMBER [peppolDocCreate];
GO
===== 6. Zpracování fronty dokumentů =====
* DB procedura ''%%spPeppolDocDownloader%%'' zpracuje tabulku ''%%PEPPOL_DOC_QUEUE%%''.
* Pro všechny záznamy se ''%%status = 0%%'':
* provede autorizaci vůči AP
* stáhne doklad
* založí doklad ve formátu BIS3.0 do DMS ESO9 (jako typ ''%%FPUPEPP%%'') a naváže jej na zpracovávaný záznam v tabulce ''%%PEPPOL_DOC_QUEUE%%''
* stažením dokladu z AP do aplikace ESO9 dojde ke zvýšení stavu dokladu na AP na ''%%status=2%%'' (=staženo)
* založí doklad daného typu (faktura, dobropis) do produkční DB
* … a do DMS založí všechny binární přílohy (PDF), které doklad BIS3.0 obsahuje
* při chybě založení dokladu zůstává v produkční DB uložen doklad ve formátu BIS3.0 (v DMS), z nějž se lze po odstranění příčiny chybu znovu pokusit založit doklad (faktury)
* tento doklad již nelze znovu stáhnou z AP, protože zde je již ve stavu ''%%status=2%%'' (=staženo)
* po úspěšném založení dokladu v produkční databázi je na něj navázán zdrojový doklad ve formátu BIS3.0 (v DMS) a všechny jeho přílohy
===== 7. API rozhraní Webhooku =====
* Webhook poskytuje vlastní **API rozhraní (CQRS)**, které umožňuje:
* mazání záznamů
* zobrazení záznamů
* editaci záznamů
* API je autorizováno pomocí HTTP hlavičky\\
''%%X-PEPPOL-WEBHOOK-SECRET%%''