{
    "schema": "eupdate-package-specification-v1",
    "author": "PB <pavel.bartos.pb@gmail.com>",
    "project_id": "b80f1390ae068ed7",
    "software_id": "ebank",
    "software": "eBank",
    "module": null,
    "release_id": "d752e11d2ccb4da0a79681deab09863a",
    "version": "0.1.0",
    "release_date": "2026-09-17",
    "published_at": "2026-09-17T14:15:57+00:00",
    "bytes": 66030,
    "sha256": "958e1f4aaa7c372add959fb54e3d7b322d30a8ee4f77b2de9a60c87664950d57",
    "file_count": 39,
    "languages": {
        "PHP": {
            "bytes": 96107,
            "files": 20
        },
        "CSS": {
            "bytes": 11336,
            "files": 1
        },
        "JavaScript": {
            "bytes": 4004,
            "files": 1
        },
        "SQL": {
            "bytes": 3455,
            "files": 1
        }
    },
    "installation_url": "https://update.estudium.eu/package.php?software_id=ebank&version=0.1.0",
    "update_url": "https://update.estudium.eu/package.php?software_id=ebank",
    "install_json": {
        "software": "eBank",
        "software_id": "ebank",
        "version": "0.1.0",
        "release_date": "2026-09-17",
        "author": {
            "name": "PB",
            "email": "",
            "website": ""
        },
        "description": {
            "cs": "Bankovní přehled pro eLoader: účty, zůstatky a pohyby. Fio, RB Premium API a experimentální Oberbank XS2A. Pouze čtení, superadmin.",
            "en": "Read-only banking dashboard for eLoader. Fio, RB Premium API and experimental Oberbank XS2A. Superadmin only."
        },
        "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",
            "shared_shell": 1,
            "database_tables": {
                "mysql": {
                    "prefix": "ebank_"
                }
            },
            "authentication": {
                "login_enabled_by_default": false
            }
        },
        "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"
                }
            }
        },
        "compatibility": {
            "os_types": [
                "source"
            ],
            "os_versions": [],
            "distribution_ids": [],
            "distributions": [],
            "native_windows_supported": false,
            "native_macos_supported": false,
            "any_linux_distribution": false
        },
        "license": "custom",
        "license_custom": "Copyright (c) 2026 PB. All rights reserved.",
        "documentation": {
            "readme": "README.md"
        },
        "project": {
            "website": ""
        },
        "homepage": "",
        "archive_metadata": {
            "working_directory": ".",
            "publisher": "dcf6d41fbcdf0e16",
            "updated_at": "2026-09-17T14:15:57+00:00",
            "application_author": "PB <pavel.bartos.pb@gmail.com>"
        }
    },
    "readme": "# eBank 0.1.0\n\nPrvní vývojová verze bankovní aplikace pro eLoader. Rozhraní přebírá obsahové uspořádání internetového bankovnictví: seznam účtů vlevo, souhrn zůstatků, pohyby, detail účtu a správu připojení. Nepoužívá logo Fio ani skutečné údaje ze zaslaného obrázku.\n\n**Tato verze pouze čte. Neodesílá platby. Přístup má pouze superadmin eLoaderu.** Konektory nejsou označené jako ověřené, dokud neproběhne úspěšná synchronizace. Bez přístupů nemůže balíček sám připojit vaše banky.\n\n## Instalace přes eUpdate\n\n1. Nejprve zálohujte eLoader i přidělenou databázi a použijte testovací instanci.\n2. V eUpdate založte projekt se `software_id = ebank`. Nahrajte **ebank-0.1.0.zip** jako verzi **0.1.0**, typ **release**, cíl **eloader_app**, platforma **source**. Identita projektu musí souhlasit s `install.json`. Do eUpdate nepatří ZIP označený `komplet`.\n3. V eLoaderu otevřete instalaci aplikací z eUpdate. Použijte instalační odkaz, který eUpdate vytvoří pro eBank; u neveřejného projektu doplňte jeho SecretID. Skutečný odkaz závisí na vašem projektu, není v balíčku vymyšlený.\n4. V centrálním nastavení databází eLoaderu přidělte aplikaci eBank MySQL/MariaDB spojení. Jméno databáze, uživatel a heslo se nastavují tam, nikoli do zdrojových souborů eBank. Pro databázi na stejném serveru použijte vaše funkční spojení `localhost`.\n5. Přihlaste se jako superadmin a otevřete eBank. Potvrďte vytvoření tabulek. Vzniknou jen tabulky `ebank_*`; tabulky isEDU se neupravují. Migrace se neprovádí na obyčejné zobrazení stránky.\n6. V **Bankovní připojení / Přidat banku** vyplňte přístupy a spusťte aktualizaci. Tajemství zadávejte pouze do zabezpečené instalace, nikoli do chatu nebo e-mailu.\n\nAlternativně stejný instalační ZIP nahrajte přes ruční instalaci aplikace v eLoaderu. Balíček má `install.json` v kořeni. Není to aktualizace samotného eLoaderu a nesmí se tak instalovat.\n\n## Požadavky\n\n- eLoader API 1, deklarované rozmezí `>=1.16.0 <2.0.0`. Novější společné menu a stylesheet API se použijí, jsou-li dostupné; jinak aplikace vykreslí vlastní navigaci.\n- PHP 8.2–8.x, `pdo_mysql`, `curl`, `sodium`, `openssl`. cURL musí podporovat `CURLOPT_SSLCERT_BLOB` i `CURLOPT_SSLKEY_BLOB` (libcurl 7.71+). Potřebný je funkční systémový seznam důvěryhodných CA.\n- Doporučený cíl: MySQL 8 / MariaDB 10.6 nebo novější, InnoDB, utf8mb4. Inicializační účet musí mít oprávnění vytvořit tabulky a indexy. Potom stačí běžná datová oprávnění.\n- HTTPS. PHP musí dostávat správný parametr `HTTPS=on` nebo port 443. Aplikace slepě nedůvěřuje hlavičce X-Forwarded-Proto od klienta.\n- Jeden aktivní synchronizační uzel / jeden zapisovací databázový server. Zámek MySQL GET_LOCK není distribuovaný napříč nezávislými master-master servery. Tato verze neřeší aktivní synchronizaci na více zapisovacích uzlech.\n\n## Jednotlivé banky\n\n### Fio\n\nImplementován klient dokumentovaného rozhraní `fioapi.fio.cz/v1/rest/periods`. Token se vytváří v internetovém bankovnictví pro jednotlivý účet; zvolte právo **Sledování účtu**. Po autorizaci počkejte přibližně 5 minut. Pro další účet vytvořte další token a připojení.\n\nImport používá výslovná období, nikoli vzdálený posuvný kurzor `last`. Mezi voláními téhož tokenu ukládá prodlevu nejméně 30 sekund. Token nesdílejte s dalším současně běžícím importem mimo eBank.\n\n`closingBalance` znamená konečný účetní zůstatek zadaného období. Neznamená disponibilní zůstatek. Blokace ani disponibilní zůstatek se nevymýšlejí a zobrazují se pomlčkou. ID pohybu pochází z `column22`, ne z ID platebního pokynu.\n\n### Raiffeisenbank CZ\n\nImplementován klient **RB Premium API** pro seznam účtů, měnové složky, zůstatky a stránkované pohyby. Vyžaduje **ClientID** z developerského portálu, soubor **.p12/.pfx** a jeho heslo. Klientský certifikát a jeho oprávnění nastavte v bankovnictví pro příslušné účty. Používejte jen oprávnění pro čtení.\n\nNa přehledu se disponibilní zůstatek mapuje na CLAV (včetně úvěrového limitu). V detailu je samostatně CLAB bez limitu. CLBD je účetní stav, BLCK blokace. Roční blokaci a konečnou platnost certifikátu řeší klient v RB; aplikace je sama neobnovuje.\n\n### Oberbank\n\n**Experimentální read-only adaptér, nikoli hotové samoobslužné připojení.** Veřejně dokumentované rozhraní Oberbank je PSD2/XS2A podle Berlin Group, provozované s finAPI. Implementace počítá s již zajištěným oprávněním TPP/AIS, QWAC s příslušnou rolí a platným souhlasem klienta (`Consent-ID`). QWAC a soukromý klíč se v této verzi vkládají jako PKCS#12.\n\nVolání jsou připravena pro `/v1/accounts`, `/v1/accounts/{id}/balances` a `/v2/accounts/{id}/transactions`. Adaptér nevytváří ani neautorizuje souhlas, neprovádí SCA a neobsahuje konektor do placeného agregátoru. Nemáte-li tyto přístupy, musí se nejprve s bankou nebo licencovaným poskytovatelem vyřešit vhodný způsob napojení; pokrytí konkrétních českých účtů poskytovatelem je třeba potvrdit. Zaškrtnutí potvrzení v eBank žádné oprávnění nevytvoří.\n\n## Synchronizace a omezení\n\nPřehled čte uloženou databázi a nečeká na bankovní servery. Tlačítka **Aktualizovat vše** a **Aktualizovat připojení** vytvářejí uložené úlohy. Prohlížeč je provádí po krocích, jeden API požadavek na krok. Zastavení nebo zavření stránky přeruší další kroky; aktuální požadavek může ještě doběhnout. Obnovte úlohu v sekci Synchronizace. Bez JavaScriptu tlačítko provede vždy jen jeden krok.\n\nPrvní import v eBank zahrnuje posledních 90 kalendářních dnů včetně dneška; další importy mají překryv 7 dnů. Ručně lze zadat kratší období. Uložené starší pohyby zůstávají. První Fio import je rozdělen do tří 30denních požadavků, a proto musí respektovat jejich prodlevy. Historický import mimo toto rozmezí, cron/daemon a automatické pravidelné aktualizace nejsou v 0.1.0 implementovány.\n\nZáznamy se sjednocují podle účtu a ID pohybu banky. Při chybě se neposune kurzor neuloženého kroku. Úspěšné dřívější kroky zůstanou; celá nedokončená úloha se ale neoznačí za úspěšnou. Součty jsou po měnách, bez kurzového přepočtu a včetně viditelných starších údajů. Stav nepřístupnosti se nesmí zaměnit za nulový zůstatek.\n\nCSV export zahrnuje pouze právě zobrazenou stránku (100 záznamů), nikoli celou historii. Při importu CSV do Excelu zvolte UTF-8 a u identifikátorů/VS textový typ, aby Excel neodstranil vedoucí nuly. Pole nebezpečná jako vzorce se neutralizují apostrofem.\n\n## Ukládání, zálohy a aktualizace\n\nBankovní účty, pohyby, stav připojení a úlohy jsou v `ebank_*` tabulkách centrální MySQL/MariaDB. API tokeny, klientské klíče a souhlasy jsou šifrovány libsodium a svázány s ID připojení. Finanční transakce samotné nejsou v databázi dodatečně šifrované aplikací: zabezpečte také databázi, server a zálohy.\n\nKlíč `master.key` je v privátním adresáři `Context::dataPath()` (obvykle `app-data/ebank`) mimo měněné soubory balíčku a mimo webroot, oprávnění 0600. Alternativou je proměnná serveru `EBANK_MASTER_KEY` obsahující 64 hexadecimálních znaků. Tu nastavte před inicializací a následně ji neměňte bez řízené migrace. Změna nebo ztráta klíče bez původní hodnoty znemožní dešifrování přístupů. Klíč chraňte odděleně od databázové zálohy.\n\nOdstranění uložených přístupů v eBank nezruší token/certifikát/souhlas v bance a nesmaže dosavadní historii. Revokaci proveďte v bance. Před změnou přístupů ukončete rozpracovanou úlohu. Tentýž bankovní účet nelze započítat přes dvě různá připojení; měňte existující připojení, nezakládejte duplicitní.\n\nAktualizace distribuuje eUpdate a instaluje eLoader. eBank nevytváří druhý aktualizační mechanismus. V balíčku nejsou žádná skutečná přístupová data.\n\n## Stav ověření\n\nViz `docs/TESTING.md`. Prošly PHP syntaktické kontroly, kontrolní skript eLoaderu 1.16.0 a 98 kontrol nad syntetickými odpověďmi bank / testovacím úložištěm. Náhled byl vykreslen a zkontrolován v Chromium na desktopu i mobilní šířce.\n\n**Nebyla provedena ostrá komunikace s bankami, plná instalace do vašeho eLoaderu 1.23.0 ani běh SQL na skutečném MySQL/MariaDB serveru.** Přístupy nebyly k dispozici a testovací PHP nemá pdo_mysql ani curl. V balíčku je samostatný opt-in integrační test pro prázdnou testovací MySQL databázi. Do produkce nasazujte až po ověření instalace a odsouhlasení načtených údajů s bankou. U Oberbank je nutné dořešit i přístupovou cestu a bankovně specifické chování.\n\nNáhled HTML je oddělený od aplikace, obsahuje jen smyšlená data a nikdy nevolá banky. Proklik sekcí/detailů slouží k posouzení rozhraní; formuláře v náhledu data neukládají.",
    "download_url": "https://update.estudium.eu/download.php?project=b80f1390ae068ed7&release=d752e11d2ccb4da0a79681deab09863a",
    "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
}