{
    "schema": "eupdate-package-specification-v1",
    "author": "PB <pavel.bartos.pb@gmail.com>",
    "project_id": "b80f1390ae068ed7",
    "software_id": "ebank",
    "software": "eBank",
    "module": null,
    "release_id": "7e1d6b66c8c447426b228e817fad6321",
    "version": "0.1.1",
    "release_date": "2026-09-17",
    "published_at": "2026-09-17T15:23:30+00:00",
    "bytes": 88507,
    "sha256": "fd5e91326b54e7e009f72a8aae14e765c223e4008e2a2ce151c80f1fbcf30c32",
    "file_count": 43,
    "languages": {
        "PHP": {
            "bytes": 108737,
            "files": 20
        },
        "CSS": {
            "bytes": 10924,
            "files": 1
        },
        "JavaScript": {
            "bytes": 4816,
            "files": 1
        },
        "SQL": {
            "bytes": 3150,
            "files": 1
        },
        "Python": {
            "bytes": 2692,
            "files": 1
        }
    },
    "installation_url": "https://update.estudium.eu/package.php?software_id=ebank&version=0.1.1",
    "update_url": "https://update.estudium.eu/package.php?software_id=ebank",
    "install_json": {
        "software": "eBank",
        "software_id": "ebank",
        "version": "0.1.1",
        "release_date": "2026-09-17",
        "author": {
            "name": "PB",
            "email": "pavel.bartos.pb@gmail.com",
            "website": ""
        },
        "description": {
            "cs": "Multibankovní přehled pro eLoader: Fio, RB Premium API a Oberbank EBICS.",
            "en": "Read-only multibank overview for eLoader: Fio, RB Premium API and Oberbank EBICS."
        },
        "package": {
            "type": "release",
            "target": "eloader_app"
        },
        "requirements": {
            "php": ">=8.2 <9.0",
            "eloader": ">=1.16.0 <2.0.0"
        },
        "eloader": {
            "api": 1,
            "data_schema": 1,
            "entry": "app.php",
            "database_tables": {
                "mysql": {
                    "prefix": "ebank_"
                }
            },
            "shared_shell": 1
        },
        "installation": {
            "web_root": ".",
            "commands": {
                "linux": {
                    "command": null,
                    "supported": false,
                    "mode": "unsupported"
                },
                "windows": {
                    "command": null,
                    "supported": false,
                    "mode": "unsupported"
                },
                "macos": {
                    "command": null,
                    "supported": false,
                    "mode": "unsupported"
                },
                "other": {
                    "command": null,
                    "supported": false,
                    "mode": "unsupported"
                },
                "source": {
                    "command": null,
                    "supported": false,
                    "mode": "manual"
                }
            }
        },
        "license": "custom",
        "license_custom": "Copyright (c) 2026 PB. All rights reserved.",
        "compatibility": {
            "os_types": [
                "source"
            ],
            "os_versions": [],
            "distribution_ids": [],
            "distributions": [],
            "native_windows_supported": false,
            "native_macos_supported": false,
            "any_linux_distribution": false
        },
        "documentation": {
            "readme": "README.md"
        },
        "ebank": {
            "read_only": true,
            "access": "eloader_superadmin",
            "optional_libraries": {
                "oberbank": "ebics-api/ebics-client-php:2.2.1"
            },
            "oberbank_protocol": "EBICS 2.5 C53"
        },
        "project": {
            "website": ""
        },
        "homepage": "",
        "archive_metadata": {
            "working_directory": ".",
            "publisher": "dcf6d41fbcdf0e16",
            "updated_at": "2026-09-17T15:23:30+00:00",
            "application_author": "PB <pavel.bartos.pb@gmail.com>"
        }
    },
    "readme": "# eBank 0.1.1 pro eLoader\n\nVydání: 17. 9. 2026. Opravné vydání první verze pro čtení bankovních dat. Samostatný projekt `ebank` v eUpdate, nikoli aktualizace jádra eLoaderu.\n\n## Oprava 0.1.1\n\nVerze 0.1.0 mohla po vytvoření databázového schématu skončit chybou chybějícího privátního šifrovacího klíče. Verze 0.1.1 klíč na nové instalaci bez bankovních spojení bezpečně doplní při prvním otevření. Zachovaný klíč s příliš širokými právy zpřísní na 0600. Pokud už databáze obsahuje šifrované bankovní přístupy, chybějící nebo poškozený klíč nenahrazuje a nadále požaduje odpovídající zálohu.\n\n## Co je v balíčku\n\nNástěnka s levým seznamem účtů seskupeným podle majitele, přehled zůstatků, samostatné součty každé měny, historie pohybů, vyhledávání podle variabilního symbolu a textu, filtry, export CSV, vlastní pojmenování a skrytí účtu. Červeně se zobrazují záporné částky. Neznámý zůstatek se zobrazuje pomlčkou, ne nulou.\n\nData se při otevření stránky čtou z přidělené databáze. Zobrazení nečeká na banku. Synchronizace se spouští zvlášť a ukládá postup; rozpracovaný import lze obnovit. Ve webu potřebuje další krok otevřenou stránku; samostatný CLI worker umožňuje naplánované spouštění na serveru.\n\nPřihlášení, přidělení databáze, jazyk, vzhled a CentralLog využívají eLoader. Tato verze povoluje přístup **výhradně superadminovi eLoaderu**. Běžní uživatelé, studenti a lektoři bankovní data nevidí. Přístup podle pouhé shody e-mailu se nepovoluje.\n\n### Konektory jsou oddělené\n\n| Soubor | Rozhraní | Rozsah této verze |\n|---|---|---|\n| `api/fio.api.php` | Fio API Bankovnictví | Čtení výpisu za období, pohyby a konečný účetní zůstatek výpisu |\n| `api/rb.api.php` | Raiffeisenbank CZ Premium API | Seznam účtů, měnové složky, dostupné typy zůstatků, stránkované pohyby |\n| `api/oberbank.api.php` | EBICS 2.5 / C53 | Adaptér pro příjem camt.053 přes níže uvedenou knihovnu a aktivované klíče |\n| `api/oberbank.http.php` | Pomocný EBICS HTTP transport | TLS, zákaz přesměrování, kontrola veřejné adresy a časové limity |\n\n**Oberbank není připravena k připojení pouhým zadáním tokenu.** Volitelná EBICS knihovna není přibalena. Je nutné ji nainstalovat, připravit kompatibilní aktivovaný keyring a ověřit parametry služby u banky. EBICS adaptér nebyl v tomto prostředí spuštěn s reálnou knihovnou ani s bankou. Viz `docs/OBERBANK-EBICS.md`.\n\nOdesílání plateb, platební šablony, správa karet, investice, úvěrové produkty a automatické párování plateb s isEDU nejsou implementovány. Nejde o úplnou náhradu bankovního internetbankingu.\n\n## Instalace přes eUpdate → eLoader\n\n1. V eUpdate vytvořte nebo vyberte projekt **eBank**, identifikátor **`ebank`**. Nahrajte `ebank-0.1.1.zip` jako vydání **0.1.1**, typ aplikace pro eLoader (`eloader_app`), balíček `release`. Identita a verze musí souhlasit s kořenovým `install.json`.\n2. V eLoaderu otevřete instalaci aplikace z eUpdate. Vložte instalační odkaz příslušného projektu; u neveřejného projektu vyplňte také jeho secretID. Potvrďte instalaci.\n3. V centrálním nastavení databází přidělte aplikaci **ebank** funkční spojení MySQL/MariaDB. Aplikace nepřepisuje heslo ani spojení jiných aplikací.\n4. Otevřete eBank jako superadmin a potvrďte **vytvoření tabulek**. Vzniknou čtyři tabulky s prefixem `ebank_`. Je-li databáze bez bankovních spojení, eBank při prvním otevření bezpečně vytvoří privátní šifrovací klíč automaticky. Tím se napraví také situace, kdy byly tabulky vytvořeny dříve než klíč.\n5. V **Bankovní spojení** přidejte banku, pojmenování a majitele/společnost. Údaje patří do chráněného formuláře na vašem serveru, ne do chatu nebo do distribučního ZIPu.\n6. Spusťte první synchronizaci za krátké období. Porovnejte účet, měnu, zůstatek a několik pohybů s bankou. Až po tomto ověření zapněte případný cron.\n\nStejný ZIP lze instalovat i ručně přes správu aplikací eLoaderu. **ZIP se nerozbaluje do veřejného kořene hostingu a neinstaluje se jako jádro eLoaderu.** Kořen archivu obsahuje přímo `install.json` a `app.php`, bez vnějšího adresáře.\n\nDalší vydání mají zachovat `software_id=ebank` a zvýšit verzi. Aktualizaci zajišťuje centrální eLoader/eUpdate; eBank si nestahuje ani nepřepisuje vlastní kód. Nová verze kódu nemá obsahovat databázová data ani klíče.\n\n### Požadavky\n\n- PHP 8.2 nebo novější řady 8.x; MySQL/MariaDB s InnoDB a utf8mb4.\n- PHP rozšíření `pdo_mysql`, `curl`, `sodium`, `openssl`, `dom`, `mbstring`.\n- eLoader API 1. Manifest připouští eLoader 1.16.0 až 1.x. Kontrolní skript dodaného eLoaderu 1.23.0 prošel; plný autentizovaný běh a instalace přes eUpdate nebyly v tomto prostředí provedeny.\n- Přidělená databáze, zápis do privátního `Context::dataPath()` a platné HTTPS.\n- Pro RB cURL s podporou `CURLOPT_SSLCERT_BLOB` a PKCS#12 přes OpenSSL.\n- Pro Oberbank navíc knihovna a rozšíření uvedené v samostatném návodu.\n\nPHP musí při HTTPS požadavku dostat serverovou proměnnou `HTTPS` zapnutou. Při reverzní proxy nastavte její bezpečné předání v konfiguraci webového serveru. Aplikace nevěří libovolné hlavičce zaslané klientem. Nenastavujte „ignorovat TLS“ ani nevypínejte ověřování certifikátu.\n\n## Připojení bank\n\n### Fio\n\nV internetbankingu vytvořte token pro čtení požadovaného účtu a vložte ho do eBank. Každý token/spojení je v této aplikaci určen jednomu účtu. Stejný token nelze uložit jako druhé spojení.\n\nPoužívá se periodický export `/v1/rest/periods/.../transactions.json`, nikoli `/last`. Stažení dat tedy nepostupuje sdíleným bankovním ukazatelem posledního stažení. Odstup požadavků eBank na jedno spojení je nejméně 35 sekund. Respektuje se také odmítnutí a limit banky.\n\nVe sloupci účetního zůstatku je **konečný zůstatek daného výpisu**. Nejde automaticky o aktuální disponibilní zůstatek. Disponibilní částka a blokace zůstávají v tomto konektoru neznámé. U historického importu se zobrazuje datum výpisu, ne předstíraný dnešní stav.\n\nOficiální podklad: `https://www.fio.cz/bankovni-sluzby/api-bankovnictvi` a tam odkazovaná dokumentace API.\n\n### Raiffeisenbank\n\nPoužívá se české **Premium API**, nikoli PSD2/OAuth. Je třeba Client ID aplikace z vývojářského portálu a bankou vydaný klientský certifikát `.p12` včetně jeho hesla. V bankovním internetbankingu přidělte certifikátu přístup jen k potřebným účtům a čtecím operacím.\n\nAPI může rozlišovat účetní zůstatek CLBD, disponibilní CLAV včetně úvěrového limitu, disponibilní vlastní prostředky CLAB a blokace BLCK. eBank ukládá tyto hodnoty odděleně; ve sloupci „Disponibilní“ zobrazuje CLAV. Součet není účetní konsolidace a nesmí se zaměňovat s výší vlastních prostředků.\n\nPohyby se tímto endpointem načítají nejvýše za posledních 90 dní; aplikace používá konzervativní kontrolu počátečního dne. Starší již uložená historie zůstává v eBank. Roční blokaci certifikátu bankou je třeba řešit v bankovním internetbankingu; samotné datum platnosti certifikátu ji neodhalí.\n\nOficiální dokumentace: `https://developers.rb.cz/premium/documentation/01rbczpremiumapi`.\n\n### Oberbank\n\nPoužívá se výhradně EBICS. Tato verze připravuje **EBICS 2.5 a C53/camt.053**, nikoli PSD2. Podporu tohoto konkrétního profilu pro vaše české účty musí potvrdit Oberbank.\n\nPotřebujete bankou sdělené Host URL, Host ID, Partner ID, User ID a kompatibilní aktivovaný JSON keyring knihovny `ebics-api/ebics-client-php` **2.2.1**, chráněný heslem. Klíče banky musí být nezávisle ověřené. Libovolný soubor z jiné EBICS aplikace ani P12 certifikát nejsou automaticky zaměnitelné s tímto keyringem.\n\n**Průvodce INI/HIA/HPB a EBICS 3.0/BTD nejsou součástí 0.1.1.** Bez odpovídajícího keyringu přímé EBICS připojení ještě není připraveno k použití. Mezitím lze přes uložené spojení ručně importovat camt.053 XML; je to import výpisu, nikoli úspěšný test spojení s bankou.\n\n## Synchronizace a provoz\n\nVe webu tlačítko Synchronizovat založí uloženou úlohu. Následují krátké požadavky. Fio má jeden export za vybrané období; RB postupně načítá stránky účtů, zůstatky a stránky pohybů. EBICS C53 má vlastní protokolovou výměnu, která může trvat déle; větší přenosy spouštějte CLI workerem.\n\nZavření stránky zastaví vyvolávání dalších kroků. Rozběhnutý serverový krok může doběhnout. Po otevření Bankovních spojení pokračujte tlačítkem Pokračovat. Chyba ponechá uložený stav; neopakuje se slepě celá úloha od začátku. Vypnutí spojení přeruší další synchronizaci a skryje jeho účty z hlavního přehledu, ale nemaže historii.\n\nZměna pověření k jiné identitě není přesun již uložených účtů. Při změně tokenu Fio na jiný účet aplikace import odmítne. Vytvořte nové spojení. Stejný bankovní účet nesmí být současně přiřazen dvěma různým spojením.\n\n### Volitelný cron\n\nV `bin/cron-runner.php` je CLI launcher. Zkopírujte jej do stabilního neveřejného adresáře mimo verzované vydání aplikace; při každém běhu vyhledá aktivní eBank v eLoaderu. Spouštějte pod stejným servisním uživatelem, který má oprávnění k datům daného eLoaderu, nikoli pod veřejným webovým URL.\n\nPříklad po nahrazení cesty skutečnou cestou stabilního eLoaderu:\n\n```bash\nphp /srv/private-jobs/ebank-cron.php \\\n  --eloader=/var/www/example.cz/private/eloader \\\n  --connection=all --days=7 --budget=240\n```\n\n`--eloader` musí ukazovat na adresář se stabilním `bootstrap.php`, nikoli na dočasný adresář aktualizace. Jestliže instalace používá `ELOADER_DATA`, nastavte stejnou proměnnou také cronu. `--connection` může být `all` nebo interní ID spojení z jeho editačního odkazu. Worker se sám neinstaluje do crontabu.\n\nRozumný počáteční interval je 15 minut; po ověření objemu dat jej upravte. Doporučuje se zamezit překryvu běhů také nástrojem `flock`. Databázové zámky aplikace chrání jednotlivá spojení na jednom přiděleném MySQL writeru. Nejde o koordinaci více nezávislých primárních databázových serverů. Časový rozpočet se kontroluje mezi kroky; právě běžící krok může skončit později.\n\n## Data, zálohy a bezpečnost\n\nV MySQL se ukládají tabulky `ebank_schema`, `ebank_connections`, `ebank_accounts`, `ebank_transactions`. Pověření jsou šifrovaná s vazbou na konkrétní ID spojení. Hlavní klíč je soubor `master.key` v privátním datovém adresáři eBank, s právy 0600. Není v instalačním balíčku. Verze 0.1.1 automaticky zpřísní širší oprávnění existujícího klíče na 0600. Chybějící klíč vytvoří pouze tehdy, když databáze neobsahuje žádné bankovní spojení; u existujících šifrovaných přístupů vždy vyžaduje původní klíč ze zálohy.\n\n**Záloha musí obsahovat databázi i privátní data eBank včetně master.key.** Obnovte je jako odpovídající sadu. Při ztrátě klíče se nesmí automaticky vytvářet náhradní a tvářit se, že původní tajemství lze přečíst. Zálohy samy chraňte a šifrujte. Detaily provozu jsou v `docs/BEZPECNOST-A-DATA.md`.\n\nČástky se nepřevádějí přes PHP float. Úložiště má DECIMAL(24,6). Nepodporovaný číselný formát nebo vyšší přesnost import odmítne místo zaokrouhlení. Exponenciální zápis částek se v této verzi odmítá. Neznámé hodnoty jsou NULL. Součty různých měn se nevytvářejí.\n\nBankovní údaje nejsou anonymní: i historie plateb obsahuje osobní údaje. V databázi jsou pohyby čitelné správcem databáze; šifrování pověření není šifrování celé databáze. Instalované PHP aplikace eLoaderu sdílejí serverové prostředí, proto je nutné důvěřovat jejich kódu.\n\nCSV má UTF-8 BOM a oddělovač středník. Textové buňky se chrání před vložením vzorců. Pro zachování počátečních nul ve VS a číslech účtů importujte příslušné sloupce v Excelu jako text. Export je omezen na 50 000 řádků; zúžte období.\n\n## Ověření vydání\n\nLokální automatické kontroly ověřují přesnou aritmetiku, převod odpovědí Fio/RB, stránkovací stavový automat RB s mock HTTP, vytvoření a oprávnění šifrovacího klíče, šifrování a vazbu pověření, zachování historie, opakovaný import, rollback chybné dávky, pokračování úlohy, blokaci souběhu a HTML escaping. Databázové testy používají testovací SQLite bridge, **nikoli skutečný MySQL**. Nativní CAMT kontroly se přeskočí, pokud v testovacím PHP chybějí potřebná rozšíření.\n\nKontrolní skript `verify-release.php` dodaného eLoaderu 1.23.0 přijal adresář balíčku a jeho SDK vstup. Nejde o úplnou instalaci ZIPu přes produkční eUpdate/eLoader. Náhled byl vykreslen v Chromium v rozlišeních 360, 1280 a 1920 px; testována byla česká obrazovka každé z pěti sekcí. Použita byla výhradně smyšlená data.\n\n**Neproběhlo připojení k žádné skutečné bance, EBICS handshake, test mTLS s bankovním certifikátem, zpracování skutečného výpisu Oberbank ani integrační nasazení na vašem serveru.** Před použitím reálných dat proveďte kontrolní postup z `docs/OVERENI.md`.\n\nPodrobné technické zdroje a omezení jsou přiložené v dokumentaci. Balíček neobsahuje bankovní tokeny, soukromé klíče ani účty z dodaného screenshotu.",
    "download_url": "https://update.estudium.eu/download.php?project=b80f1390ae068ed7&release=7e1d6b66c8c447426b228e817fad6321",
    "package_target": "eloader_app",
    "requirements": {
        "php": ">=8.2 <9.0",
        "eloader": ">=1.16.0 <2.0.0"
    },
    "license": {
        "id": "custom",
        "name": "Vlastní",
        "custom_text": "Copyright (c) 2026 PB. All rights reserved."
    },
    "deployment": {
        "archive_root": ".",
        "web_root": "."
    },
    "project_type": "application",
    "hosting": null
}