# QRPlatbaApp – QR kód pro platby ## Přehled Aplikace **QRPlatbaApp** generuje QR kódy pro platby pacientů v ordinaci. Údaje o pacientovi jsou předávány z Medicusu, aplikace zobrazí okno s výběrem položky k úhradě a generuje QR kód ve formátu **SPAYD** (Czech Payment Standard). ## Soubory - `QRPlatbaApp.py` — hlavní Python skript (customtkinter GUI) - `dist/QRPlatbaApp.exe` — kompilovaný spustitelný soubor (bez CMD okna) ## Technologie - **Python 3.x** (nutný pouze pro vývoj, EXE běží bez Pythonu) - **customtkinter** — moderní GUI - **qrcode** — generování QR kódů - **pillow (PIL)** — manipulace s obrázky - **fdb** — připojení na Firebird DB (Medicus) ## Jak to funguje ### 1. Spouštění z Medicusu Medicus předá údaje pacienta přes příkazový řádek do EXE: ``` QRPlatbaApp.exe %JMENO% %PRIJMENI% %RODCIS% ``` ### 2. Načtení ceníku Skript se připojí na Medicus DB a načte ceník ze stored procedure `VLV_SEL`: ```python cur.execute("SELECT V.KOD, V.NAZEV, V.CENA FROM VLV_SEL(NULL, NULL, NULL) V ORDER BY V.KOD") ``` ### 3. GUI okno Zobrazí se okno s: - Údaji pacienta (jméno, příjmení, rodné číslo) - Výběrem položky k úhradě (dropdown) - Výběrem bankovního účtu (2 možnosti: Fio 2100046291/2010 nebo 2800046620/2010) - Tlačítko "Uložit QR kód" - QR kód (200x200px, SPAYD formát) ### 4. SPAYD formát QR kód obsahuje: ``` SPD*1.0*ACC:CZ7520100000002800046620*AM:500.00*CC:CZK*X-VS:7309281045*MSG:Buzalka%20Vladimír%20–%20Poplatek ``` - `ACC` — IBAN bankovního účtu - `AM` — částka (Kč) - `CC` — měna (CZK) - `X-VS` — variabilní symbol (rodné číslo pacienta) - `MSG` — zpráva (jméno + položka) ### 5. Uložení QR Po kliknutí na "Uložit QR kód" se PNG vygeneruje do adresáře: ``` U:\OrdinaceProjekt\Medicus\QRCode\QRPlatby\Buzalka_Vladimír_20260510_143025.png ``` ## Konfigurace v Medicusu V menu **Konfigurace > Externí programy** přidej nový záznam: | Položka | Hodnota | |---------|---------| | **Kategorie** | Ostatní | | **Typ programu** | Externí program | | **Program** | `U:\OrdinaceProjekt\Medicus\QRCode\dist\QRPlatbaApp.exe` | | **Příkazový řádek** | `"U:\OrdinaceProjekt\Medicus\QRCode\dist\QRPlatbaApp.exe" %JMENO% %PRIJMENI% %RODCIS%` | | **Pacient** | ✓ (vyžaduje vybraného pacienta) | | **Menu** | QR Platba | ## Firebird DB připojení ```python DB_DSN = r'localhost:c:\medicus 3\data\medicus.fdb' DB_USER = 'SYSDBA' DB_PASSWORD = 'masterkey' DB_CHARSET = 'win1250' ``` ## Bankovní účty ```python ACCOUNTS = { "2100046291/2010": "CZ1720100000002100046291", "2800046620/2010": "CZ7520100000002800046620", } ``` Oba účty jsou u Fio banky. ## Spouštění bez CMD okna EXE soubor se zkompiloval pomocí PyInstalleru s parametrem `--windowed`, což zajistí spuštění bez zobrazení CMD okna. GUI se zobrazí přímo bez blikání. ## Příjmání argumentů Python skript přijímá argumenty přesně z příkazového řádku: ```python if len(sys.argv) >= 4: JMENO = sys.argv[1] # arg 1 z Medicusu (%JMENO%) PRIJMENI = sys.argv[2] # arg 2 z Medicusu (%PRIJMENI%) RODCIS = sys.argv[3] # arg 3 z Medicusu (%RODCIS%) ``` ## Ladění a opravy Při chybách se informace vypíší v GUI (messagebox). Pokud potřebuješ upravit zdrojový kód, edituj `QRPlatbaApp.py` a znovu zkompiluj EXE. ## Výstup Generované QR kódy PNG se ukládají do: ``` U:\OrdinaceProjekt\Medicus\QRCode\QRPlatby\ ├── Buzalka_Vladimír_20260510_143025.png ├── Buzalka_Vladimír_20260510_144030.png └── ... ``` ## PyInstaller kompilace EXE soubor byl zkompilován příkazem: ```bash pyinstaller --onefile --windowed --icon=qrcode.ico QRPlatbaApp.py ``` Výsledný EXE se nachází v `dist/QRPlatbaApp.exe` a je schopen běžet na počítačích bez Pythonu. Při potřebě znovu kompilovat po změně kódu: ```bash cd U:\OrdinaceProjekt\Medicus\QRCode C:\Python312\Scripts\pyinstaller.exe --onefile --windowed --icon=qrcode.ico --clean QRPlatbaApp.py ```